* it should detect all possible problems with the planned operation
*/
-gint file_data_verify_ci(FileData *fd)
+gint file_data_verify_ci(FileData *fd, GList *list)
{
gint ret = CHANGE_OK;
gchar *dir;
+ GList *work = NULL;
+ FileData *fd1 = NULL;
if (!fd->change)
{
g_free(dest_dir);
}
+ /* During a rename operation, check if another planned destination file has
+ * the same filename
+ */
+ if(fd->change->type == FILEDATA_CHANGE_RENAME)
+ {
+ work = list;
+ while (work)
+ {
+ fd1 = work->data;
+ work = work->next;
+ if (fd1 != NULL && fd != fd1 )
+ {
+ if (!strcmp(fd->change->dest, fd1->change->dest))
+ {
+ ret |= CHANGE_DUPLICATE_DEST;
+ }
+ }
+ }
+ }
+
fd->change->error = ret;
if (ret == 0) DEBUG_1("Change checked: OK: %s", fd->path);
}
-gint file_data_sc_verify_ci(FileData *fd)
+gint file_data_sc_verify_ci(FileData *fd, GList *list)
{
GList *work;
gint ret;
- ret = file_data_verify_ci(fd);
+ ret = file_data_verify_ci(fd, list);
work = fd->sidecar_files;
while (work)
{
FileData *sfd = work->data;
- ret |= file_data_verify_ci(sfd);
+ ret |= file_data_verify_ci(sfd, list);
work = work->next;
}
g_string_append(result, _("there are unsaved metadata changes for the file"));
}
+ if (error & CHANGE_DUPLICATE_DEST)
+ {
+ if (result->len > 0) g_string_append(result, ", ");
+ g_string_append(result, _("another destination file has the same filename"));
+ }
+
return g_string_free(result, FALSE);
}
fd = work->data;
work = work->next;
- error = with_sidecars ? file_data_sc_verify_ci(fd) : file_data_verify_ci(fd);
+ error = with_sidecars ? file_data_sc_verify_ci(fd, list) : file_data_verify_ci(fd, list);
all_errors |= error;
common_errors &= error;
#define DIALOG_WIDTH 750
-static GdkPixbuf *file_util_get_error_icon(FileData *fd, GtkWidget *widget);
+static GdkPixbuf *file_util_get_error_icon(FileData *fd, GList *list, GtkWidget *widget);
/*
*--------------------------------------------------------------------------
gchar *sidecars;
sidecars = with_sidecars ? file_data_sc_list_to_string(fd) : NULL;
- GdkPixbuf *icon = file_util_get_error_icon(fd, view);
+ GdkPixbuf *icon = file_util_get_error_icon(fd, list, view);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter,
UTILITY_COLUMN_FD, fd,
}
}
-static GdkPixbuf *file_util_get_error_icon(FileData *fd, GtkWidget *widget)
+static GdkPixbuf *file_util_get_error_icon(FileData *fd, GList *list, GtkWidget *widget)
{
static GdkPixbuf *pb_warning;
static GdkPixbuf *pb_error;
pb_apply = gtk_widget_render_icon(widget, GTK_STOCK_APPLY, GTK_ICON_SIZE_MENU, NULL);
}
- error = file_data_sc_verify_ci(fd);
+ error = file_data_sc_verify_ci(fd, list);
if (!error) return pb_apply;
else if (ud->dir_fd)
{
g_assert(ud->dir_fd->sidecar_files == NULL); // directories should not have sidecars
- error = file_data_verify_ci(ud->dir_fd);
+ error = file_data_verify_ci(ud->dir_fd, ud->flist);
if (error) desc = file_data_get_error_string(error);
}
else
gtk_tree_model_get(store, &iter, UTILITY_COLUMN_FD, &fd, -1);
g_assert(ud->with_sidecars); /* sidecars must be renamed too, it would break the pairing otherwise */
file_data_sc_update_ci_rename(fd, dest);
+
gtk_list_store_set(GTK_LIST_STORE(store), &iter,
- UTILITY_COLUMN_PIXBUF, file_util_get_error_icon(fd, ud->listview),
- UTILITY_COLUMN_DEST_PATH, fd->change->dest,
- UTILITY_COLUMN_DEST_NAME, filename_from_path(fd->change->dest),
- -1);
+ UTILITY_COLUMN_DEST_PATH, fd->change->dest,
+ UTILITY_COLUMN_DEST_NAME, filename_from_path(fd->change->dest),
+ -1);
}
- return;
}
+ else
+ {
+ front = gtk_entry_get_text(GTK_ENTRY(ud->auto_entry_front));
+ end = gtk_entry_get_text(GTK_ENTRY(ud->auto_entry_end));
+ padding = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ud->auto_spin_pad));
+ format = gtk_entry_get_text(GTK_ENTRY(ud->format_entry));
- front = gtk_entry_get_text(GTK_ENTRY(ud->auto_entry_front));
- end = gtk_entry_get_text(GTK_ENTRY(ud->auto_entry_end));
- padding = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ud->auto_spin_pad));
+ if (mode == UTILITY_RENAME_FORMATTED)
+ {
+ start_n = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ud->format_spin));
+ }
+ else
+ {
+ start_n = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ud->auto_spin_start));
+ }
- format = gtk_entry_get_text(GTK_ENTRY(ud->format_entry));
+ store = gtk_tree_view_get_model(GTK_TREE_VIEW(ud->listview));
+ n = start_n;
+ valid = gtk_tree_model_get_iter_first(store, &iter);
+ while (valid)
+ {
+ gchar *dest;
+ FileData *fd;
+ gtk_tree_model_get(store, &iter, UTILITY_COLUMN_FD, &fd, -1);
- if (mode == UTILITY_RENAME_FORMATTED)
- {
- start_n = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ud->format_spin));
- }
- else
- {
- start_n = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(ud->auto_spin_start));
+ if (mode == UTILITY_RENAME_FORMATTED)
+ {
+ dest = file_util_rename_multiple_auto_format_name(format, fd->name, n);
+ }
+ else
+ {
+ dest = g_strdup_printf("%s%0*d%s", front, padding, n, end);
+ }
+
+ g_assert(ud->with_sidecars); /* sidecars must be renamed too, it would break the pairing otherwise */
+ file_data_sc_update_ci_rename(fd, dest);
+ gtk_list_store_set(GTK_LIST_STORE(store), &iter,
+ UTILITY_COLUMN_DEST_PATH, fd->change->dest,
+ UTILITY_COLUMN_DEST_NAME, filename_from_path(fd->change->dest),
+ -1);
+ g_free(dest);
+
+ n++;
+ valid = gtk_tree_model_iter_next(store, &iter);
+ }
}
- store = gtk_tree_view_get_model(GTK_TREE_VIEW(ud->listview));
- n = start_n;
+ /* Check the other entries in the list - if there are
+ * multiple destination filenames with the same name the
+ * error icons must be updated
+ */
valid = gtk_tree_model_get_iter_first(store, &iter);
while (valid)
{
- gchar *dest;
FileData *fd;
gtk_tree_model_get(store, &iter, UTILITY_COLUMN_FD, &fd, -1);
- if (mode == UTILITY_RENAME_FORMATTED)
- {
- dest = file_util_rename_multiple_auto_format_name(format, fd->name, n);
- }
- else
- {
- dest = g_strdup_printf("%s%0*d%s", front, padding, n, end);
- }
-
- g_assert(ud->with_sidecars); /* sidecars must be renamed too, it would break the pairing otherwise */
- file_data_sc_update_ci_rename(fd, dest);
gtk_list_store_set(GTK_LIST_STORE(store), &iter,
- UTILITY_COLUMN_PIXBUF, file_util_get_error_icon(fd, ud->listview),
- UTILITY_COLUMN_DEST_PATH, fd->change->dest,
- UTILITY_COLUMN_DEST_NAME, filename_from_path(fd->change->dest),
- -1);
- g_free(dest);
-
- n++;
+ UTILITY_COLUMN_PIXBUF, file_util_get_error_icon(fd, ud->flist, ud->listview),
+ -1);
valid = gtk_tree_model_iter_next(store, &iter);
}
g_string_append(message, _("\nStatus: "));
- error = ud->with_sidecars ? file_data_sc_verify_ci(fd) : file_data_verify_ci(fd);
+ error = ud->with_sidecars ? file_data_sc_verify_ci(fd, ud->flist) : file_data_verify_ci(fd, ud->flist);
if (error)
{