Skip to content

Commit

Permalink
regroup sidecar files when an operation on partial group is finished
Browse files Browse the repository at this point in the history
  • Loading branch information
nadvornik committed Jun 3, 2009
1 parent 347fc7c commit 21b5ebf
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 8 deletions.
16 changes: 15 additions & 1 deletion src/filedata.c
Original file line number Diff line number Diff line change
Expand Up @@ -1429,6 +1429,8 @@ void file_data_free_ci(FileData *fd)
if (!fdci) return;

file_data_planned_change_remove(fd);

if (fdci->regroup_when_finished) file_data_disable_grouping(fd, FALSE);

g_free(fdci->source);
g_free(fdci->dest);
Expand All @@ -1438,6 +1440,12 @@ void file_data_free_ci(FileData *fd)
fd->change = NULL;
}

void file_data_set_regroup_when_finished(FileData *fd, gboolean enable)
{
FileDataChangeInfo *fdci = fd->change;
if (!fdci) return;
fdci->regroup_when_finished = enable;
}

static gboolean file_data_sc_add_ci(FileData *fd, FileDataChangeType type)
{
Expand Down Expand Up @@ -2373,7 +2381,7 @@ static gboolean file_data_list_dump(GList *list)
}
#endif

GList *file_data_process_groups(GList *list)
GList *file_data_process_groups_in_selection(GList *list, GList **ungrouped_list)
{
GList *out = NULL;
GList *work = list;
Expand All @@ -2385,7 +2393,13 @@ GList *file_data_process_groups(GList *list)
work = work->next;

if (!file_data_list_contains_whole_group(list, fd))
{
file_data_disable_grouping(fd, TRUE);
if (ungrouped_list)
{
*ungrouped_list = g_list_prepend(*ungrouped_list, file_data_ref(fd));
}
}
}

/* remove sidecars from the list,
Expand Down
3 changes: 2 additions & 1 deletion src/filedata.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ gboolean file_data_apply_ci(FileData *fd);
void file_data_free_ci(FileData *fd);
void file_data_free_ci_list(GList *fd_list);

void file_data_set_regroup_when_finished(FileData *fd, gboolean enable);

gint file_data_sc_verify_ci(FileData *fd);

Expand All @@ -126,7 +127,7 @@ gboolean file_data_sc_apply_ci(FileData *fd);
void file_data_sc_free_ci(FileData *fd);
void file_data_sc_free_ci_list(GList *fd_list);

GList *file_data_process_groups(GList *list);
GList *file_data_process_groups_in_selection(GList *list, GList **ungrouped);


typedef void (*FileDataNotifyFunc)(FileData *fd, NotifyType type, gpointer data);
Expand Down
1 change: 1 addition & 0 deletions src/typedefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -450,6 +450,7 @@ struct _FileDataChangeInfo {
gchar *source;
gchar *dest;
gint error;
gboolean regroup_when_finished;
};

struct _FileData {
Expand Down
52 changes: 46 additions & 6 deletions src/utilops.c
Original file line number Diff line number Diff line change
Expand Up @@ -1919,24 +1919,41 @@ static void file_util_write_metadata_details_dialog(UtilityData *ud, FileData *f
g_free(message2);
}


static void file_util_mark_ungrouped_files(GList *work)
{
while (work)
{
FileData *fd = work->data;
file_data_set_regroup_when_finished(fd, TRUE);
work = work->next;
}
}

static void file_util_delete_full(FileData *source_fd, GList *source_list, GtkWidget *parent, UtilityPhase phase)
{
UtilityData *ud;
GList *flist = filelist_copy(source_list);
GList *ungrouped = NULL;

if (source_fd)
flist = g_list_append(flist, file_data_ref(source_fd));

if (!flist) return;

flist = file_data_process_groups(flist);
flist = file_data_process_groups_in_selection(flist, &ungrouped);

if (!file_data_sc_add_ci_delete_list(flist))
{
file_util_warn_op_in_progress(_("File deletion failed"));
file_data_disable_grouping_list(ungrouped, FALSE);
filelist_free(flist);
filelist_free(ungrouped);
return;
}

file_util_mark_ungrouped_files(ungrouped);
filelist_free(ungrouped);

ud = file_util_data_new(UTILITY_TYPE_DELETE);

Expand Down Expand Up @@ -2005,25 +2022,30 @@ static void file_util_write_metadata_full(FileData *source_fd, GList *source_lis
file_util_dialog_run(ud);
}


static void file_util_move_full(FileData *source_fd, GList *source_list, const gchar *dest_path, GtkWidget *parent, UtilityPhase phase)
{
UtilityData *ud;
GList *flist = filelist_copy(source_list);
GList *ungrouped = NULL;

if (source_fd)
flist = g_list_append(flist, file_data_ref(source_fd));

if (!flist) return;

flist = file_data_process_groups(flist);
flist = file_data_process_groups_in_selection(flist, &ungrouped);

if (!file_data_sc_add_ci_move_list(flist, dest_path))
{
file_util_warn_op_in_progress(_("Move failed"));
file_data_disable_grouping_list(ungrouped, FALSE);
filelist_free(flist);
filelist_free(ungrouped);
return;
}

file_util_mark_ungrouped_files(ungrouped);
filelist_free(ungrouped);

ud = file_util_data_new(UTILITY_TYPE_MOVE);

Expand Down Expand Up @@ -2051,21 +2073,27 @@ static void file_util_copy_full(FileData *source_fd, GList *source_list, const g
{
UtilityData *ud;
GList *flist = filelist_copy(source_list);
GList *ungrouped = NULL;

if (source_fd)
flist = g_list_append(flist, file_data_ref(source_fd));

if (!flist) return;

flist = file_data_process_groups(flist);
flist = file_data_process_groups_in_selection(flist, &ungrouped);

if (!file_data_sc_add_ci_copy_list(flist, dest_path))
{
file_util_warn_op_in_progress(_("Copy failed"));
file_data_disable_grouping_list(ungrouped, FALSE);
filelist_free(flist);
filelist_free(ungrouped);
return;
}

file_util_mark_ungrouped_files(ungrouped);
filelist_free(ungrouped);

ud = file_util_data_new(UTILITY_TYPE_COPY);

ud->phase = phase;
Expand All @@ -2092,21 +2120,27 @@ static void file_util_rename_full(FileData *source_fd, GList *source_list, const
{
UtilityData *ud;
GList *flist = filelist_copy(source_list);
GList *ungrouped = NULL;

if (source_fd)
flist = g_list_append(flist, file_data_ref(source_fd));

if (!flist) return;

flist = file_data_process_groups(flist);
flist = file_data_process_groups_in_selection(flist, &ungrouped);

if (!file_data_sc_add_ci_rename_list(flist, dest_path))
{
file_util_warn_op_in_progress(_("Rename failed"));
file_data_disable_grouping_list(ungrouped, FALSE);
filelist_free(flist);
filelist_free(ungrouped);
return;
}

file_util_mark_ungrouped_files(ungrouped);
filelist_free(ungrouped);

ud = file_util_data_new(UTILITY_TYPE_RENAME);

ud->phase = phase;
Expand All @@ -2133,6 +2167,7 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G
{
UtilityData *ud;
GList *flist;
GList *ungrouped = NULL;

if (editor_no_param(key))
{
Expand All @@ -2148,15 +2183,20 @@ static void file_util_start_editor_full(const gchar *key, FileData *source_fd, G

if (!flist) return;

flist = file_data_process_groups(flist);
flist = file_data_process_groups_in_selection(flist, &ungrouped);

if (!file_data_sc_add_ci_unspecified_list(flist, dest_path))
{
file_util_warn_op_in_progress(_("Can't run external editor"));
file_data_disable_grouping_list(ungrouped, FALSE);
filelist_free(flist);
filelist_free(ungrouped);
return;
}

file_util_mark_ungrouped_files(ungrouped);
filelist_free(ungrouped);

if (editor_is_filter(key))
ud = file_util_data_new(UTILITY_TYPE_FILTER);
else
Expand Down

0 comments on commit 21b5ebf

Please sign in to comment.