diff options
author | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 10:52:31 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 10:52:31 +0000 |
commit | 56858438221a9dad8c9cffef92b8b1c93f2c9b53 (patch) | |
tree | 4427365db9e6d4e90f191e2bcdabfb018e161dbf /daemon/gvfsjobenumerate.c | |
parent | bf420e4a758f3f649ec218a907586343b33b6e3c (diff) | |
download | gvfs-56858438221a9dad8c9cffef92b8b1c93f2c9b53.tar.gz |
First roughly working version of enumeration
Original git commit by Alexander Larsson <alex@greebo.(none)> at 1168965445 +0100
svn path=/trunk/; revision=243
Diffstat (limited to 'daemon/gvfsjobenumerate.c')
-rw-r--r-- | daemon/gvfsjobenumerate.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/daemon/gvfsjobenumerate.c b/daemon/gvfsjobenumerate.c index d67c0294..453920b9 100644 --- a/daemon/gvfsjobenumerate.c +++ b/daemon/gvfsjobenumerate.c @@ -112,13 +112,67 @@ g_vfs_job_enumerate_set_result (GVfsJobEnumerate *job, void g_vfs_job_enumerate_add_info (GVfsJobEnumerate *job, - GList *info) + GList *infos) { + DBusMessage *message, *orig_message; + DBusMessageIter iter, array_iter; + char *sig; + + orig_message = g_vfs_job_dbus_get_message (G_VFS_JOB_DBUS (job)); + + message = dbus_message_new_method_call (dbus_message_get_sender (orig_message), + job->object_path, + G_VFS_DBUS_ENUMERATOR_INTERFACE, + G_VFS_DBUS_ENUMERATOR_GOT_INFO); + dbus_message_set_no_reply (message, TRUE); + + dbus_message_iter_init_append (message, &iter); + + sig = g_dbus_get_file_info_signature (job->requested_result); + + if (!dbus_message_iter_open_container (&iter, + DBUS_TYPE_ARRAY, sig, + &array_iter)) + g_dbus_oom (); + + g_free (sig); + + while (infos != NULL) + { + g_dbus_append_file_info (&array_iter, + job->requested_result, + infos->data); + infos = infos->next; + } + + if (!dbus_message_iter_close_container (&iter, &array_iter)) + g_dbus_oom (); + + dbus_connection_send (g_vfs_job_dbus_get_connection (G_VFS_JOB_DBUS (job)), + message, NULL); + dbus_message_unref (message); } void g_vfs_job_enumerate_done (GVfsJobEnumerate *job) { + DBusMessage *message, *orig_message; + + g_assert (!G_VFS_JOB (job)->failed); + + orig_message = g_vfs_job_dbus_get_message (G_VFS_JOB_DBUS (job)); + + message = dbus_message_new_method_call (dbus_message_get_sender (orig_message), + job->object_path, + G_VFS_DBUS_ENUMERATOR_INTERFACE, + G_VFS_DBUS_ENUMERATOR_DONE); + dbus_message_set_no_reply (message, TRUE); + + dbus_connection_send (g_vfs_job_dbus_get_connection (G_VFS_JOB_DBUS (job)), + message, NULL); + dbus_message_unref (message); + + g_vfs_job_emit_finished (G_VFS_JOB (job)); } static gboolean |