|
|
92a5638 |
Index: daemon/gvfsbackendburn.c
|
|
|
92a5638 |
===================================================================
|
|
|
92a5638 |
--- daemon/gvfsbackendburn.c (revisione 2144)
|
|
|
92a5638 |
+++ daemon/gvfsbackendburn.c (copia locale)
|
|
|
92a5638 |
@@ -953,6 +953,49 @@
|
|
|
92a5638 |
return TRUE;
|
|
|
92a5638 |
}
|
|
|
92a5638 |
|
|
|
92a5638 |
+static gboolean
|
|
|
92a5638 |
+try_move (GVfsBackend *backend,
|
|
|
92a5638 |
+ GVfsJobMove *job,
|
|
|
92a5638 |
+ const char *source,
|
|
|
92a5638 |
+ const char *destination,
|
|
|
92a5638 |
+ GFileCopyFlags flags,
|
|
|
92a5638 |
+ GFileProgressCallback progress_callback,
|
|
|
92a5638 |
+ gpointer progress_callback_data)
|
|
|
92a5638 |
+{
|
|
|
92a5638 |
+ VirtualNode *source_node, *root_node, *source_dir, *dest_dir;
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ root_node = G_VFS_BACKEND_BURN (backend)->root_node;
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ source_node = virtual_node_lookup (root_node, source, &source_dir);
|
|
|
92a5638 |
+ if (source_node == NULL)
|
|
|
92a5638 |
+ {
|
|
|
92a5638 |
+ g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
|
|
|
92a5638 |
+ G_IO_ERROR_NOT_FOUND,
|
|
|
92a5638 |
+ _("No such file or directory"));
|
|
|
92a5638 |
+ return TRUE;
|
|
|
92a5638 |
+ }
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ if (virtual_node_lookup (root_node, destination, &dest_dir) != NULL)
|
|
|
92a5638 |
+ {
|
|
|
92a5638 |
+ g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
|
|
|
92a5638 |
+ G_IO_ERROR_EXISTS,
|
|
|
92a5638 |
+ _("File exists"));
|
|
|
92a5638 |
+ return TRUE;
|
|
|
92a5638 |
+ }
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ g_free (source_node->filename);
|
|
|
92a5638 |
+ source_node->filename = g_path_get_basename (destination);
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ if (source_dir != dest_dir) {
|
|
|
92a5638 |
+ source_dir->children = g_list_remove (source_dir->children, source_node);
|
|
|
92a5638 |
+ dest_dir->children = g_list_append (dest_dir->children, source_node);
|
|
|
92a5638 |
+ }
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ g_vfs_job_succeeded (G_VFS_JOB (job));
|
|
|
92a5638 |
+
|
|
|
92a5638 |
+ return TRUE;
|
|
|
92a5638 |
+}
|
|
|
92a5638 |
+
|
|
|
92a5638 |
static void
|
|
|
92a5638 |
g_vfs_backend_burn_class_init (GVfsBackendBurnClass *klass)
|
|
|
92a5638 |
{
|
|
|
92a5638 |
@@ -970,6 +1013,7 @@
|
|
|
92a5638 |
backend_class->try_set_display_name = try_set_display_name;
|
|
|
92a5638 |
backend_class->try_push = try_push;
|
|
|
92a5638 |
backend_class->try_delete = try_delete;
|
|
|
92a5638 |
+ backend_class->try_move = try_move;
|
|
|
92a5638 |
backend_class->read = do_read;
|
|
|
92a5638 |
backend_class->seek_on_read = do_seek_on_read;
|
|
|
92a5638 |
backend_class->close_read = do_close_read;
|