gvfs r1922 - in trunk: . client common daemon
- From: gicmo svn gnome org
- To: svn-commits-list gnome org
- Subject: gvfs r1922 - in trunk: . client common daemon
- Date: Mon, 1 Sep 2008 21:22:15 +0000 (UTC)
Author: gicmo
Date: Mon Sep 1 21:22:15 2008
New Revision: 1922
URL: http://svn.gnome.org/viewvc/gvfs?rev=1922&view=rev
Log:
Add Push and Pull. Remove Upload. (#550100)
Added:
trunk/daemon/gvfsjobpull.c
- copied, changed from r1921, /trunk/daemon/gvfsjobupload.c
trunk/daemon/gvfsjobpull.h
- copied, changed from r1921, /trunk/daemon/gvfsjobupload.h
trunk/daemon/gvfsjobpush.c
- copied, changed from r1921, /trunk/daemon/gvfsjobupload.c
trunk/daemon/gvfsjobpush.h
- copied, changed from r1921, /trunk/daemon/gvfsjobupload.h
Removed:
trunk/daemon/gvfsjobupload.c
trunk/daemon/gvfsjobupload.h
Modified:
trunk/ChangeLog
trunk/client/gdaemonfile.c
trunk/common/gvfsdaemonprotocol.h
trunk/daemon/Makefile.am
trunk/daemon/gvfsbackend.c
trunk/daemon/gvfsbackend.h
trunk/daemon/gvfsbackendburn.c
trunk/daemon/gvfsbackendtrash.c
Modified: trunk/client/gdaemonfile.c
==============================================================================
--- trunk/client/gdaemonfile.c (original)
+++ trunk/client/gdaemonfile.c Mon Sep 1 21:22:15 2008
@@ -1940,47 +1940,52 @@
}
static gboolean
-g_daemon_file_copy (GFile *source,
- GFile *destination,
- GFileCopyFlags flags,
- GCancellable *cancellable,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data,
- GError **error)
+file_transfer (GFile *source,
+ GFile *destination,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GCancellable *cancellable,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data,
+ GError **error)
{
- GDaemonFile *daemon_source;
DBusMessage *reply;
- char *local_path;
char *obj_path, *dbus_obj_path;
dbus_uint32_t flags_dbus;
+ dbus_bool_t dbus_remove_source;
struct ProgressCallbackData data;
-
- if (!G_IS_DAEMON_FILE (destination))
+ char *local_path = NULL;
+ gboolean source_is_daemon;
+ gboolean dest_is_daemon;
+ gboolean native_transfer;
+
+ native_transfer = FALSE;
+ source_is_daemon = G_IS_DAEMON_FILE (source);
+ dest_is_daemon = G_IS_DAEMON_FILE (destination);
+
+ if (source_is_daemon && dest_is_daemon)
+ native_transfer = TRUE;
+ else if (dest_is_daemon && !source_is_daemon)
+ local_path = g_file_get_path (source);
+ else if (source_is_daemon && !dest_is_daemon)
+ local_path = g_file_get_path (destination);
+ else
{
- /* Fall back to default move */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Move not supported");
+ /* Fall back to default copy/move */
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ "Operation not supported");
return FALSE;
}
- if (G_IS_DAEMON_FILE (source))
- {
- daemon_source = G_DAEMON_FILE (source);
- local_path = NULL;
- }
- else
+ if (!native_transfer && local_path == NULL)
{
- daemon_source = NULL;
- local_path = g_file_get_path (source);
+ /* This will cause the fallback code to be involved */
+ g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported, files on different mounts"));
+ return FALSE;
- if (local_path == NULL)
- {
- /* This will cause the fallback code to be involved */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported, files on different mounts"));
- return FALSE;
- }
}
-
+
if (progress_callback)
{
obj_path = g_strdup_printf ("/org/gtk/vfs/callback/%p", &obj_path);
@@ -1997,30 +2002,52 @@
data.progress_callback_data = progress_callback_data;
flags_dbus = flags;
-
- if (daemon_source)
+ dbus_remove_source = remove_source;
+
+ if (native_transfer == TRUE)
{
- reply = do_sync_2_path_call (source, destination,
- G_VFS_DBUS_MOUNT_OP_COPY,
- obj_path, progress_callback_message, &data,
- NULL, cancellable, error,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
- 0);
+ const char *method_string;
+
+ if (remove_source == FALSE)
+ method_string = G_VFS_DBUS_MOUNT_OP_COPY;
+ else
+ method_string = G_VFS_DBUS_MOUNT_OP_MOVE;
+
+ reply = do_sync_2_path_call (source, destination,
+ method_string,
+ obj_path, progress_callback_message, &data,
+ NULL, cancellable, error,
+ DBUS_TYPE_UINT32, &flags_dbus,
+ DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
+ 0);
+ }
+ else if (dest_is_daemon == TRUE)
+ {
+ reply = do_sync_2_path_call (destination, NULL,
+ G_VFS_DBUS_MOUNT_OP_PUSH,
+ obj_path, progress_callback_message, &data,
+ NULL, cancellable, error,
+ G_DBUS_TYPE_CSTRING, &local_path,
+ DBUS_TYPE_UINT32, &flags_dbus,
+ DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
+ DBUS_TYPE_BOOLEAN, &dbus_remove_source,
+ 0);
}
else
{
- reply = do_sync_2_path_call (destination, NULL,
- G_VFS_DBUS_MOUNT_OP_UPLOAD,
- obj_path, progress_callback_message, &data,
- NULL, cancellable, error,
- G_DBUS_TYPE_CSTRING, &local_path,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
- 0);
- g_free (local_path);
+ reply = do_sync_2_path_call (source, NULL,
+ G_VFS_DBUS_MOUNT_OP_PULL,
+ obj_path, progress_callback_message, &data,
+ NULL, cancellable, error,
+ G_DBUS_TYPE_CSTRING, &local_path,
+ DBUS_TYPE_UINT32, &flags_dbus,
+ DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
+ DBUS_TYPE_BOOLEAN, &dbus_remove_source,
+ 0);
+
}
+ g_free (local_path);
g_free (obj_path);
if (reply == NULL)
@@ -2031,7 +2058,7 @@
}
static gboolean
-g_daemon_file_move (GFile *source,
+g_daemon_file_copy (GFile *source,
GFile *destination,
GFileCopyFlags flags,
GCancellable *cancellable,
@@ -2039,50 +2066,41 @@
gpointer progress_callback_data,
GError **error)
{
- DBusMessage *reply;
- char *obj_path, *dbus_obj_path;
- dbus_uint32_t flags_dbus;
- struct ProgressCallbackData data;
+ gboolean result;
- if (!G_IS_DAEMON_FILE (source) ||
- !G_IS_DAEMON_FILE (destination))
- {
- /* Fall back to default move */
- g_set_error_literal (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, "Move not supported");
- return FALSE;
- }
-
- if (progress_callback)
- {
- obj_path = g_strdup_printf ("/org/gtk/vfs/callback/%p", &obj_path);
- dbus_obj_path = obj_path;
- }
- else
- {
- obj_path = NULL;
- /* Can't pass NULL obj path as arg */
- dbus_obj_path = "/org/gtk/vfs/void";
- }
+ result = file_transfer (source,
+ destination,
+ flags,
+ FALSE,
+ cancellable,
+ progress_callback,
+ progress_callback_data,
+ error);
- data.progress_callback = progress_callback;
- data.progress_callback_data = progress_callback_data;
-
- flags_dbus = flags;
- reply = do_sync_2_path_call (source, destination,
- G_VFS_DBUS_MOUNT_OP_MOVE,
- obj_path, progress_callback_message, &data,
- NULL, cancellable, error,
- DBUS_TYPE_UINT32, &flags_dbus,
- DBUS_TYPE_OBJECT_PATH, &dbus_obj_path,
- 0);
+ return result;
+}
- g_free (obj_path);
+static gboolean
+g_daemon_file_move (GFile *source,
+ GFile *destination,
+ GFileCopyFlags flags,
+ GCancellable *cancellable,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data,
+ GError **error)
+{
+ gboolean result;
- if (reply == NULL)
- return FALSE;
+ result = file_transfer (source,
+ destination,
+ flags,
+ TRUE,
+ cancellable,
+ progress_callback,
+ progress_callback_data,
+ error);
- dbus_message_unref (reply);
- return TRUE;
+ return result;
}
static GFileMonitor*
Modified: trunk/common/gvfsdaemonprotocol.h
==============================================================================
--- trunk/common/gvfsdaemonprotocol.h (original)
+++ trunk/common/gvfsdaemonprotocol.h Mon Sep 1 21:22:15 2008
@@ -42,8 +42,9 @@
#define G_VFS_DBUS_MOUNT_OP_MAKE_DIRECTORY "MakeDirectory"
#define G_VFS_DBUS_MOUNT_OP_MAKE_SYMBOLIC_LINK "MakeSymbolicLink"
#define G_VFS_DBUS_MOUNT_OP_COPY "Copy"
-#define G_VFS_DBUS_MOUNT_OP_UPLOAD "Upload"
#define G_VFS_DBUS_MOUNT_OP_MOVE "Move"
+#define G_VFS_DBUS_MOUNT_OP_PUSH "Push"
+#define G_VFS_DBUS_MOUNT_OP_PULL "Pull"
#define G_VFS_DBUS_MOUNT_OP_SET_ATTRIBUTE "SetAttribute"
#define G_VFS_DBUS_MOUNT_OP_QUERY_SETTABLE_ATTRIBUTES "QuerySettableAttributes"
#define G_VFS_DBUS_MOUNT_OP_QUERY_WRITABLE_NAMESPACES "QueryWritableNamespaces"
Modified: trunk/daemon/Makefile.am
==============================================================================
--- trunk/daemon/Makefile.am (original)
+++ trunk/daemon/Makefile.am Mon Sep 1 21:22:15 2008
@@ -134,8 +134,9 @@
gvfsjobtrash.c gvfsjobtrash.h \
gvfsjobdelete.c gvfsjobdelete.h \
gvfsjobcopy.c gvfsjobcopy.h \
- gvfsjobupload.c gvfsjobupload.h \
gvfsjobmove.c gvfsjobmove.h \
+ gvfsjobpush.c gvfsjobpush.h \
+ gvfsjobpull.c gvfsjobpull.h \
gvfsjobmakedirectory.c gvfsjobmakedirectory.h \
gvfsjobmakesymlink.c gvfsjobmakesymlink.h \
gvfsjobsetattribute.c gvfsjobsetattribute.h \
Modified: trunk/daemon/gvfsbackend.c
==============================================================================
--- trunk/daemon/gvfsbackend.c (original)
+++ trunk/daemon/gvfsbackend.c Mon Sep 1 21:22:15 2008
@@ -48,9 +48,10 @@
#include <gvfsjobmakedirectory.h>
#include <gvfsjobmakesymlink.h>
#include <gvfsjobcreatemonitor.h>
-#include <gvfsjobupload.h>
#include <gvfsjobcopy.h>
#include <gvfsjobmove.h>
+#include <gvfsjobpush.h>
+#include <gvfsjobpull.h>
#include <gvfsjobsetattribute.h>
#include <gvfsjobqueryattributes.h>
#include <gdbusutils.h>
@@ -534,8 +535,12 @@
job = g_vfs_job_copy_new (connection, message, backend);
else if (dbus_message_is_method_call (message,
G_VFS_DBUS_MOUNT_INTERFACE,
- G_VFS_DBUS_MOUNT_OP_UPLOAD))
- job = g_vfs_job_upload_new (connection, message, backend);
+ G_VFS_DBUS_MOUNT_OP_PUSH))
+ job = g_vfs_job_push_new (connection, message, backend);
+ else if (dbus_message_is_method_call (message,
+ G_VFS_DBUS_MOUNT_INTERFACE,
+ G_VFS_DBUS_MOUNT_OP_PULL))
+ job = g_vfs_job_pull_new (connection, message, backend);
else if (dbus_message_is_method_call (message,
G_VFS_DBUS_MOUNT_INTERFACE,
G_VFS_DBUS_MOUNT_OP_MOVE))
Modified: trunk/daemon/gvfsbackend.h
==============================================================================
--- trunk/daemon/gvfsbackend.h (original)
+++ trunk/daemon/gvfsbackend.h Mon Sep 1 21:22:15 2008
@@ -64,8 +64,9 @@
typedef struct _GVfsJobMakeDirectory GVfsJobMakeDirectory;
typedef struct _GVfsJobMakeSymlink GVfsJobMakeSymlink;
typedef struct _GVfsJobCopy GVfsJobCopy;
-typedef struct _GVfsJobUpload GVfsJobUpload;
typedef struct _GVfsJobMove GVfsJobMove;
+typedef struct _GVfsJobPush GVfsJobPush;
+typedef struct _GVfsJobPull GVfsJobPull;
typedef struct _GVfsJobSetAttribute GVfsJobSetAttribute;
typedef struct _GVfsJobQueryAttributes GVfsJobQueryAttributes;
typedef struct _GVfsJobCreateMonitor GVfsJobCreateMonitor;
@@ -297,21 +298,7 @@
GFileCopyFlags flags,
GFileProgressCallback progress_callback,
gpointer progress_callback_data);
- void (*upload) (GVfsBackend *backend,
- GVfsJobUpload *job,
- const char *destination,
- const char *local_path,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- gboolean (*try_upload) (GVfsBackend *backend,
- GVfsJobUpload *job,
- const char *destination,
- const char *local_path,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data);
- void (*move) (GVfsBackend *backend,
+ void (*move) (GVfsBackend *backend,
GVfsJobMove *job,
const char *source,
const char *destination,
@@ -325,6 +312,38 @@
GFileCopyFlags flags,
GFileProgressCallback progress_callback,
gpointer progress_callback_data);
+ void (*push) (GVfsBackend *backend,
+ GVfsJobPush *job,
+ const char *destination,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ gboolean (*try_push) (GVfsBackend *backend,
+ GVfsJobPush *job,
+ const char *destination,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ void (*pull) (GVfsBackend *backend,
+ GVfsJobPull *job,
+ const char *source,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
+ gboolean (*try_pull) (GVfsBackend *backend,
+ GVfsJobPull *job,
+ const char *source,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data);
void (*set_attribute) (GVfsBackend *backend,
GVfsJobSetAttribute *set_attribute,
const char *filename,
Modified: trunk/daemon/gvfsbackendburn.c
==============================================================================
--- trunk/daemon/gvfsbackendburn.c (original)
+++ trunk/daemon/gvfsbackendburn.c Mon Sep 1 21:22:15 2008
@@ -809,18 +809,27 @@
}
static gboolean
-try_upload (GVfsBackend *backend,
- GVfsJobUpload *job,
- const char *destination,
- const char *local_path,
- GFileCopyFlags flags,
- GFileProgressCallback progress_callback,
- gpointer progress_callback_data)
+try_push (GVfsBackend *backend,
+ GVfsJobPush *job,
+ const char *destination,
+ const char *local_path,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data)
{
VirtualNode *file, *dir;
struct stat stat_buf;
char *dirname, *basename;
-
+
+ if (remove_source)
+ {
+ /* Fallback to copy & delete for now, fix that up later */
+ g_vfs_job_failed_literal (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported by backend"));
+ return TRUE;
+ }
+
if (g_stat (local_path, &stat_buf) == -1)
{
int errsv = errno;
@@ -959,7 +968,7 @@
backend_class->try_create_dir_monitor = try_create_dir_monitor;
backend_class->try_make_directory = try_make_directory;
backend_class->try_set_display_name = try_set_display_name;
- backend_class->try_upload = try_upload;
+ backend_class->try_push = try_push;
backend_class->try_delete = try_delete;
backend_class->read = do_read;
backend_class->seek_on_read = do_seek_on_read;
Modified: trunk/daemon/gvfsbackendtrash.c
==============================================================================
--- trunk/daemon/gvfsbackendtrash.c (original)
+++ trunk/daemon/gvfsbackendtrash.c Mon Sep 1 21:22:15 2008
@@ -1761,6 +1761,86 @@
}
static void
+do_pull (GVfsBackend *backend,
+ GVfsJobPull *job,
+ const char *filename,
+ const char *local_destination,
+ GFileCopyFlags flags,
+ gboolean remove_source,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data)
+{
+ GFile *dst_file;
+ GFile *src_file;
+ char *trashdir, *topdir, *relative_path, *trashfile;
+ char *src_path;
+ gboolean res;
+ GError *error = NULL;
+
+ res = decode_path (filename, &trashdir, &trashfile, &relative_path, &topdir);
+
+ if (res == FALSE)
+ {
+ g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
+ G_IO_ERROR_IS_DIRECTORY,
+ _("Can't open directory"));
+ return;
+ }
+
+ dst_file = g_file_new_for_path (local_destination);
+
+ src_path = g_build_filename (trashdir, "files", trashfile, relative_path, NULL);
+ src_file = g_file_new_for_path (src_path);
+
+ if (remove_source)
+ res = g_file_move (src_file,
+ dst_file,
+ flags,
+ G_VFS_JOB (job)->cancellable,
+ progress_callback,
+ progress_callback_data,
+ &error);
+ else
+ res = g_file_copy (src_file,
+ dst_file,
+ flags,
+ G_VFS_JOB (job)->cancellable,
+ progress_callback,
+ progress_callback_data,
+ &error);
+
+ if (res == FALSE)
+ {
+ g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
+ g_error_free (error);
+ }
+ else
+ {
+ g_vfs_job_succeeded (G_VFS_JOB (job));
+
+ if (relative_path == NULL)
+ {
+ char *info_filename, *info_path;
+
+ info_filename = g_strconcat (trashfile, ".trashinfo", NULL);
+ info_path = g_build_filename (trashdir, "info", info_filename, NULL);
+ g_free (info_filename);
+ g_unlink (info_path);
+ g_free (info_path);
+ }
+ }
+
+ g_object_unref (src_file);
+ g_object_unref (dst_file);
+
+ g_free (trashdir);
+ g_free (trashfile);
+ g_free (relative_path);
+ g_free (topdir);
+}
+
+
+static void
g_vfs_backend_trash_class_init (GVfsBackendTrashClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
@@ -1778,4 +1858,5 @@
backend_class->delete = do_delete;
backend_class->create_dir_monitor = do_create_dir_monitor;
backend_class->create_file_monitor = do_create_file_monitor;
+ backend_class->pull = do_pull;
}
Copied: trunk/daemon/gvfsjobpull.c (from r1921, /trunk/daemon/gvfsjobupload.c)
==============================================================================
--- /trunk/daemon/gvfsjobupload.c (original)
+++ trunk/daemon/gvfsjobpull.c Mon Sep 1 21:22:15 2008
@@ -1,5 +1,5 @@
/* GIO - GLib Input, Output and Streaming Library
- *
+ *
* Copyright (C) 2006-2007 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -31,11 +31,11 @@
#include <glib.h>
#include <dbus/dbus.h>
#include <glib/gi18n.h>
-#include "gvfsjobupload.h"
+#include "gvfsjobpull.h"
#include "gdbusutils.h"
#include "gvfsdaemonprotocol.h"
-G_DEFINE_TYPE (GVfsJobUpload, g_vfs_job_upload, G_VFS_TYPE_JOB_DBUS)
+G_DEFINE_TYPE (GVfsJobPull, g_vfs_job_pull, G_VFS_TYPE_JOB_DBUS)
static void run (GVfsJob *job);
static gboolean try (GVfsJob *job);
@@ -44,58 +44,60 @@
DBusMessage *message);
static void
-g_vfs_job_upload_finalize (GObject *object)
+g_vfs_job_pull_finalize (GObject *object)
{
- GVfsJobUpload *job;
+ GVfsJobPull *job;
+
+ job = G_VFS_JOB_PULL (object);
- job = G_VFS_JOB_UPLOAD (object);
-
g_free (job->local_path);
- g_free (job->destination);
+ g_free (job->source);
g_free (job->callback_obj_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_upload_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_upload_parent_class)->finalize) (object);
+
+ if (G_OBJECT_CLASS (g_vfs_job_pull_parent_class)->finalize)
+ (*G_OBJECT_CLASS (g_vfs_job_pull_parent_class)->finalize) (object);
}
static void
-g_vfs_job_upload_class_init (GVfsJobUploadClass *klass)
+g_vfs_job_pull_class_init (GVfsJobPullClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_upload_finalize;
+
+ gobject_class->finalize = g_vfs_job_pull_finalize;
job_class->run = run;
job_class->try = try;
job_dbus_class->create_reply = create_reply;
}
static void
-g_vfs_job_upload_init (GVfsJobUpload *job)
+g_vfs_job_pull_init (GVfsJobPull *job)
{
}
GVfsJob *
-g_vfs_job_upload_new (DBusConnection *connection,
+g_vfs_job_pull_new (DBusConnection *connection,
DBusMessage *message,
GVfsBackend *backend)
{
- GVfsJobUpload *job;
+ GVfsJobPull *job;
DBusMessage *reply;
DBusError derror;
int path1_len, path2_len;
const char *path1_data, *path2_data, *callback_obj_path;
dbus_uint32_t flags;
-
+ dbus_bool_t remove_source;
+
dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
+ if (!dbus_message_get_args (message, &derror,
DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
&path1_data, &path1_len,
DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
&path2_data, &path2_len,
DBUS_TYPE_UINT32, &flags,
DBUS_TYPE_OBJECT_PATH, &callback_obj_path,
+ DBUS_TYPE_BOOLEAN, &remove_source,
0))
{
reply = dbus_message_new_error (message,
@@ -107,18 +109,20 @@
return NULL;
}
- job = g_object_new (G_VFS_TYPE_JOB_UPLOAD,
+ job = g_object_new (G_VFS_TYPE_JOB_PULL,
"message", message,
"connection", connection,
NULL);
- job->destination = g_strndup (path1_data, path1_len);
+ job->source = g_strndup (path1_data, path1_len);
job->local_path = g_strndup (path2_data, path2_len);
job->backend = backend;
job->flags = flags;
+ job->remove_source = remove_source;
+ g_print ("Remove Source: %s\n", remove_source ? "true" : "false");
if (strcmp (callback_obj_path, "/org/gtk/vfs/void") != 0)
job->callback_obj_path = g_strdup (callback_obj_path);
-
+
return G_VFS_JOB (job);
}
@@ -129,7 +133,7 @@
{
GVfsJob *job = G_VFS_JOB (user_data);
GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- GVfsJobUpload *op_job = G_VFS_JOB_UPLOAD (job);
+ GVfsJobPull *op_job = G_VFS_JOB_PULL (job);
dbus_uint64_t current_dbus, total_dbus;
DBusMessage *message;
@@ -137,7 +141,7 @@
if (op_job->callback_obj_path == NULL)
return;
-
+
message =
dbus_message_new_method_call (dbus_message_get_sender (dbus_job->message),
op_job->callback_obj_path,
@@ -160,41 +164,43 @@
static void
run (GVfsJob *job)
{
- GVfsJobUpload *op_job = G_VFS_JOB_UPLOAD (job);
+ GVfsJobPull *op_job = G_VFS_JOB_PULL (job);
GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
- if (class->upload == NULL)
+ if (class->pull == NULL)
{
g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
_("Operation not supported by backend"));
return;
}
-
- class->upload (op_job->backend,
- op_job,
- op_job->destination,
- op_job->local_path,
- op_job->flags,
- progress_callback,
- job);
+
+ class->pull (op_job->backend,
+ op_job,
+ op_job->source,
+ op_job->local_path,
+ op_job->flags,
+ op_job->remove_source,
+ progress_callback,
+ job);
}
static gboolean
try (GVfsJob *job)
{
- GVfsJobUpload *op_job = G_VFS_JOB_UPLOAD (job);
+ GVfsJobPull *op_job = G_VFS_JOB_PULL (job);
GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
- if (class->try_upload == NULL)
+ if (class->try_pull == NULL)
return FALSE;
-
- return class->try_upload (op_job->backend,
- op_job,
- op_job->destination,
- op_job->local_path,
- op_job->flags,
- progress_callback,
- job);
+
+ return class->try_pull (op_job->backend,
+ op_job,
+ op_job->source,
+ op_job->local_path,
+ op_job->flags,
+ op_job->remove_source,
+ progress_callback,
+ job);
}
/* Might be called on an i/o thread */
@@ -206,6 +212,6 @@
DBusMessage *reply;
reply = dbus_message_new_method_return (message);
-
+
return reply;
}
Copied: trunk/daemon/gvfsjobpull.h (from r1921, /trunk/daemon/gvfsjobupload.h)
==============================================================================
--- /trunk/daemon/gvfsjobupload.h (original)
+++ trunk/daemon/gvfsjobpull.h Mon Sep 1 21:22:15 2008
@@ -1,5 +1,5 @@
/* GIO - GLib Input, Output and Streaming Library
- *
+ *
* Copyright (C) 2006-2007 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -20,8 +20,8 @@
* Author: Alexander Larsson <alexl redhat com>
*/
-#ifndef __G_VFS_JOB_UPLOAD_H__
-#define __G_VFS_JOB_UPLOAD_H__
+#ifndef __G_VFS_JOB_PULL_H__
+#define __G_VFS_JOB_PULL_H__
#include <gio/gio.h>
#include <gvfsjob.h>
@@ -30,37 +30,38 @@
G_BEGIN_DECLS
-#define G_VFS_TYPE_JOB_UPLOAD (g_vfs_job_upload_get_type ())
-#define G_VFS_JOB_UPLOAD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_UPLOAD, GVfsJobUpload))
-#define G_VFS_JOB_UPLOAD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_UPLOAD, GVfsJobUploadClass))
-#define G_VFS_IS_JOB_UPLOAD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_UPLOAD))
-#define G_VFS_IS_JOB_UPLOAD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_UPLOAD))
-#define G_VFS_JOB_UPLOAD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_UPLOAD, GVfsJobUploadClass))
+#define G_VFS_TYPE_JOB_PULL (g_vfs_job_pull_get_type ())
+#define G_VFS_JOB_PULL(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_PULL, GVfsJobPull))
+#define G_VFS_JOB_PULL_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_PULL, GVfsJobPullClass))
+#define G_VFS_IS_JOB_PULL(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_PULL))
+#define G_VFS_IS_JOB_PULL_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_PULL))
+#define G_VFS_JOB_PULL_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_PULL, GVfsJobPullClass))
-typedef struct _GVfsJobUploadClass GVfsJobUploadClass;
+typedef struct _GVfsJobPullClass GVfsJobPullClass;
-struct _GVfsJobUpload
+struct _GVfsJobPull
{
GVfsJobDBus parent_instance;
GVfsBackend *backend;
- char *destination;
+ char *source;
char *local_path;
GFileCopyFlags flags;
char *callback_obj_path;
+ gboolean remove_source;
};
-struct _GVfsJobUploadClass
+struct _GVfsJobPullClass
{
GVfsJobDBusClass parent_class;
};
-GType g_vfs_job_upload_get_type (void) G_GNUC_CONST;
+GType g_vfs_job_pull_get_type (void) G_GNUC_CONST;
-GVfsJob *g_vfs_job_upload_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
+GVfsJob *g_vfs_job_pull_new (DBusConnection *connection,
+ DBusMessage *message,
+ GVfsBackend *backend);
G_END_DECLS
-#endif /* __G_VFS_JOB_UPLOAD_H__ */
+#endif /* __G_VFS_JOB_PULL_H__ */
Copied: trunk/daemon/gvfsjobpush.c (from r1921, /trunk/daemon/gvfsjobupload.c)
==============================================================================
--- /trunk/daemon/gvfsjobupload.c (original)
+++ trunk/daemon/gvfsjobpush.c Mon Sep 1 21:22:15 2008
@@ -1,5 +1,5 @@
/* GIO - GLib Input, Output and Streaming Library
- *
+ *
* Copyright (C) 2006-2007 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -31,11 +31,11 @@
#include <glib.h>
#include <dbus/dbus.h>
#include <glib/gi18n.h>
-#include "gvfsjobupload.h"
+#include "gvfsjobpush.h"
#include "gdbusutils.h"
#include "gvfsdaemonprotocol.h"
-G_DEFINE_TYPE (GVfsJobUpload, g_vfs_job_upload, G_VFS_TYPE_JOB_DBUS)
+G_DEFINE_TYPE (GVfsJobPush, g_vfs_job_push, G_VFS_TYPE_JOB_DBUS)
static void run (GVfsJob *job);
static gboolean try (GVfsJob *job);
@@ -44,58 +44,60 @@
DBusMessage *message);
static void
-g_vfs_job_upload_finalize (GObject *object)
+g_vfs_job_push_finalize (GObject *object)
{
- GVfsJobUpload *job;
+ GVfsJobPush *job;
+
+ job = G_VFS_JOB_PUSH (object);
- job = G_VFS_JOB_UPLOAD (object);
-
g_free (job->local_path);
g_free (job->destination);
g_free (job->callback_obj_path);
-
- if (G_OBJECT_CLASS (g_vfs_job_upload_parent_class)->finalize)
- (*G_OBJECT_CLASS (g_vfs_job_upload_parent_class)->finalize) (object);
+
+ if (G_OBJECT_CLASS (g_vfs_job_push_parent_class)->finalize)
+ (*G_OBJECT_CLASS (g_vfs_job_push_parent_class)->finalize) (object);
}
static void
-g_vfs_job_upload_class_init (GVfsJobUploadClass *klass)
+g_vfs_job_push_class_init (GVfsJobPushClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GVfsJobClass *job_class = G_VFS_JOB_CLASS (klass);
GVfsJobDBusClass *job_dbus_class = G_VFS_JOB_DBUS_CLASS (klass);
-
- gobject_class->finalize = g_vfs_job_upload_finalize;
+
+ gobject_class->finalize = g_vfs_job_push_finalize;
job_class->run = run;
job_class->try = try;
job_dbus_class->create_reply = create_reply;
}
static void
-g_vfs_job_upload_init (GVfsJobUpload *job)
+g_vfs_job_push_init (GVfsJobPush *job)
{
}
GVfsJob *
-g_vfs_job_upload_new (DBusConnection *connection,
+g_vfs_job_push_new (DBusConnection *connection,
DBusMessage *message,
GVfsBackend *backend)
{
- GVfsJobUpload *job;
+ GVfsJobPush *job;
DBusMessage *reply;
DBusError derror;
int path1_len, path2_len;
const char *path1_data, *path2_data, *callback_obj_path;
dbus_uint32_t flags;
-
+ dbus_bool_t remove_source;
+
dbus_error_init (&derror);
- if (!dbus_message_get_args (message, &derror,
+ if (!dbus_message_get_args (message, &derror,
DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
&path1_data, &path1_len,
DBUS_TYPE_ARRAY, DBUS_TYPE_BYTE,
&path2_data, &path2_len,
DBUS_TYPE_UINT32, &flags,
DBUS_TYPE_OBJECT_PATH, &callback_obj_path,
+ DBUS_TYPE_BOOLEAN, &remove_source,
0))
{
reply = dbus_message_new_error (message,
@@ -107,7 +109,7 @@
return NULL;
}
- job = g_object_new (G_VFS_TYPE_JOB_UPLOAD,
+ job = g_object_new (G_VFS_TYPE_JOB_PUSH,
"message", message,
"connection", connection,
NULL);
@@ -116,9 +118,11 @@
job->local_path = g_strndup (path2_data, path2_len);
job->backend = backend;
job->flags = flags;
+ job->remove_source = remove_source;
+ g_print ("Remove Source: %s\n", remove_source ? "true" : "false");
if (strcmp (callback_obj_path, "/org/gtk/vfs/void") != 0)
job->callback_obj_path = g_strdup (callback_obj_path);
-
+
return G_VFS_JOB (job);
}
@@ -129,7 +133,7 @@
{
GVfsJob *job = G_VFS_JOB (user_data);
GVfsJobDBus *dbus_job = G_VFS_JOB_DBUS (job);
- GVfsJobUpload *op_job = G_VFS_JOB_UPLOAD (job);
+ GVfsJobPush *op_job = G_VFS_JOB_PUSH (job);
dbus_uint64_t current_dbus, total_dbus;
DBusMessage *message;
@@ -137,7 +141,7 @@
if (op_job->callback_obj_path == NULL)
return;
-
+
message =
dbus_message_new_method_call (dbus_message_get_sender (dbus_job->message),
op_job->callback_obj_path,
@@ -160,41 +164,43 @@
static void
run (GVfsJob *job)
{
- GVfsJobUpload *op_job = G_VFS_JOB_UPLOAD (job);
+ GVfsJobPush *op_job = G_VFS_JOB_PUSH (job);
GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
- if (class->upload == NULL)
+ if (class->push == NULL)
{
g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
_("Operation not supported by backend"));
return;
}
-
- class->upload (op_job->backend,
- op_job,
- op_job->destination,
- op_job->local_path,
- op_job->flags,
- progress_callback,
- job);
+
+ class->push (op_job->backend,
+ op_job,
+ op_job->destination,
+ op_job->local_path,
+ op_job->flags,
+ op_job->remove_source,
+ progress_callback,
+ job);
}
static gboolean
try (GVfsJob *job)
{
- GVfsJobUpload *op_job = G_VFS_JOB_UPLOAD (job);
+ GVfsJobPush *op_job = G_VFS_JOB_PUSH (job);
GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend);
- if (class->try_upload == NULL)
+ if (class->try_push == NULL)
return FALSE;
-
- return class->try_upload (op_job->backend,
- op_job,
- op_job->destination,
- op_job->local_path,
- op_job->flags,
- progress_callback,
- job);
+
+ return class->try_push (op_job->backend,
+ op_job,
+ op_job->destination,
+ op_job->local_path,
+ op_job->flags,
+ op_job->remove_source,
+ progress_callback,
+ job);
}
/* Might be called on an i/o thread */
@@ -206,6 +212,6 @@
DBusMessage *reply;
reply = dbus_message_new_method_return (message);
-
+
return reply;
}
Copied: trunk/daemon/gvfsjobpush.h (from r1921, /trunk/daemon/gvfsjobupload.h)
==============================================================================
--- /trunk/daemon/gvfsjobupload.h (original)
+++ trunk/daemon/gvfsjobpush.h Mon Sep 1 21:22:15 2008
@@ -1,5 +1,5 @@
/* GIO - GLib Input, Output and Streaming Library
- *
+ *
* Copyright (C) 2006-2007 Red Hat, Inc.
*
* This library is free software; you can redistribute it and/or
@@ -20,8 +20,8 @@
* Author: Alexander Larsson <alexl redhat com>
*/
-#ifndef __G_VFS_JOB_UPLOAD_H__
-#define __G_VFS_JOB_UPLOAD_H__
+#ifndef __G_VFS_JOB_PUSH_H__
+#define __G_VFS_JOB_PUSH_H__
#include <gio/gio.h>
#include <gvfsjob.h>
@@ -30,16 +30,16 @@
G_BEGIN_DECLS
-#define G_VFS_TYPE_JOB_UPLOAD (g_vfs_job_upload_get_type ())
-#define G_VFS_JOB_UPLOAD(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_UPLOAD, GVfsJobUpload))
-#define G_VFS_JOB_UPLOAD_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_UPLOAD, GVfsJobUploadClass))
-#define G_VFS_IS_JOB_UPLOAD(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_UPLOAD))
-#define G_VFS_IS_JOB_UPLOAD_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_UPLOAD))
-#define G_VFS_JOB_UPLOAD_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_UPLOAD, GVfsJobUploadClass))
+#define G_VFS_TYPE_JOB_PUSH (g_vfs_job_push_get_type ())
+#define G_VFS_JOB_PUSH(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), G_VFS_TYPE_JOB_PUSH, GVfsJobPush))
+#define G_VFS_JOB_PUSH_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), G_VFS_TYPE_JOB_PUSH, GVfsJobPushClass))
+#define G_VFS_IS_JOB_PUSH(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_VFS_TYPE_JOB_PUSH))
+#define G_VFS_IS_JOB_PUSH_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), G_VFS_TYPE_JOB_PUSH))
+#define G_VFS_JOB_PUSH_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_VFS_TYPE_JOB_PUSH, GVfsJobPushClass))
-typedef struct _GVfsJobUploadClass GVfsJobUploadClass;
+typedef struct _GVfsJobPushClass GVfsJobPushClass;
-struct _GVfsJobUpload
+struct _GVfsJobPush
{
GVfsJobDBus parent_instance;
@@ -48,19 +48,20 @@
char *local_path;
GFileCopyFlags flags;
char *callback_obj_path;
+ gboolean remove_source;
};
-struct _GVfsJobUploadClass
+struct _GVfsJobPushClass
{
GVfsJobDBusClass parent_class;
};
-GType g_vfs_job_upload_get_type (void) G_GNUC_CONST;
+GType g_vfs_job_push_get_type (void) G_GNUC_CONST;
-GVfsJob *g_vfs_job_upload_new (DBusConnection *connection,
- DBusMessage *message,
- GVfsBackend *backend);
+GVfsJob *g_vfs_job_push_new (DBusConnection *connection,
+ DBusMessage *message,
+ GVfsBackend *backend);
G_END_DECLS
-#endif /* __G_VFS_JOB_UPLOAD_H__ */
+#endif /* __G_VFS_JOB_PUSH_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]