diff options
author | Ondrej Holy <oholy@redhat.com> | 2016-07-26 11:40:56 +0200 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2017-11-28 14:51:56 +0100 |
commit | 5af38d0d3f00b8d1eab7c6dbc0906a853621836b (patch) | |
tree | 9c1bdd265e9a49ef36da16ff836a18d3f8c3250d /monitor | |
parent | 42e740c56b9d572c02fca4d7ac117de3d2e1f284 (diff) | |
download | gvfs-5af38d0d3f00b8d1eab7c6dbc0906a853621836b.tar.gz |
proxy: Port GProxyDrive to GTask
GSimpleAsyncResult is deprecated in favour of GTask and should be replaced.
https://bugzilla.gnome.org/show_bug.cgi?id=747412
Diffstat (limited to 'monitor')
-rw-r--r-- | monitor/proxy/gproxydrive.c | 356 |
1 files changed, 131 insertions, 225 deletions
diff --git a/monitor/proxy/gproxydrive.c b/monitor/proxy/gproxydrive.c index 8cb5e6a4..55dc5160 100644 --- a/monitor/proxy/gproxydrive.c +++ b/monitor/proxy/gproxydrive.c @@ -522,18 +522,24 @@ g_proxy_drive_get_id (GProxyDrive *drive) } typedef struct { - GProxyDrive *drive; - GAsyncReadyCallback callback; - gpointer user_data; - gchar *cancellation_id; - GCancellable *cancellable; gulong cancelled_handler_id; const gchar *mount_op_id; } DBusOp; static void +dbus_op_free (DBusOp *data) +{ + g_free (data->cancellation_id); + + if (data->mount_op_id) + g_proxy_mount_operation_destroy (data->mount_op_id); + + g_free (data); +} + +static void cancel_operation_reply_cb (GVfsRemoteVolumeMonitor *proxy, GAsyncResult *res, gpointer user_data) @@ -555,23 +561,15 @@ static void operation_cancelled (GCancellable *cancellable, gpointer user_data) { - DBusOp *data = user_data; - GSimpleAsyncResult *simple; + GTask *task = G_TASK (user_data); + DBusOp *data = g_task_get_task_data (task); GVfsRemoteVolumeMonitor *proxy; + GProxyDrive *drive = G_PROXY_DRIVE (g_task_get_source_object (task)); G_LOCK (proxy_drive); - simple = g_simple_async_result_new_error (G_OBJECT (data->drive), - data->callback, - data->user_data, - G_IO_ERROR, - G_IO_ERROR_CANCELLED, - _("Operation was cancelled")); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); - /* Now tell the remote volume monitor that the op has been cancelled */ - proxy = g_proxy_volume_monitor_get_dbus_proxy (data->drive->volume_monitor); + proxy = g_proxy_volume_monitor_get_dbus_proxy (drive->volume_monitor); gvfs_remote_volume_monitor_call_cancel_operation (proxy, data->cancellation_id, NULL, @@ -580,6 +578,8 @@ operation_cancelled (GCancellable *cancellable, g_object_unref (proxy); G_UNLOCK (proxy_drive); + + g_task_return_error_if_cancelled (task); } /* ---------------------------------------------------------------------------------------------------- */ @@ -589,7 +589,8 @@ eject_cb (GVfsRemoteVolumeMonitor *proxy, GAsyncResult *res, gpointer user_data) { - DBusOp *data = user_data; + GTask *task = G_TASK (user_data); + DBusOp *data = g_task_get_task_data (task); GError *error = NULL; gvfs_remote_volume_monitor_call_drive_eject_finish (proxy, @@ -597,37 +598,23 @@ eject_cb (GVfsRemoteVolumeMonitor *proxy, &error); if (data->cancelled_handler_id > 0) - g_signal_handler_disconnect (data->cancellable, data->cancelled_handler_id); + g_signal_handler_disconnect (g_task_get_cancellable (task), data->cancelled_handler_id); - if (!g_cancellable_is_cancelled (data->cancellable)) + if (!g_cancellable_is_cancelled (g_task_get_cancellable (task))) { - GSimpleAsyncResult *simple; - if (error != NULL) { g_dbus_error_strip_remote_error (error); - simple = g_simple_async_result_new_from_error (G_OBJECT (data->drive), - data->callback, - data->user_data, - error); + g_task_return_error (task, error); + error = NULL; } else { - simple = g_simple_async_result_new (G_OBJECT (data->drive), - data->callback, - data->user_data, - NULL); + g_task_return_boolean (task, TRUE); } - g_simple_async_result_complete (simple); - g_object_unref (simple); } - g_proxy_mount_operation_destroy (data->mount_op_id); - g_object_unref (data->drive); - g_free (data->cancellation_id); - if (data->cancellable != NULL) - g_object_unref (data->cancellable); - g_free (data); + g_object_unref (task); if (error != NULL) g_error_free (error); } @@ -643,44 +630,40 @@ g_proxy_drive_eject_with_operation (GDrive *drive, GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive); DBusOp *data; GVfsRemoteVolumeMonitor *proxy; + GTask *task; G_LOCK (proxy_drive); + task = g_task_new (drive, cancellable, callback, user_data); + g_task_set_source_tag (task, g_proxy_drive_eject_with_operation); + if (g_cancellable_is_cancelled (cancellable)) { - GSimpleAsyncResult *simple; - simple = g_simple_async_result_new_error (G_OBJECT (drive), - callback, - user_data, - G_IO_ERROR, - G_IO_ERROR_CANCELLED, - _("Operation was cancelled")); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); G_UNLOCK (proxy_drive); - goto out; + + g_task_return_error_if_cancelled (task); + g_object_unref (task); + return; } data = g_new0 (DBusOp, 1); - data->drive = g_object_ref (proxy_drive); - data->callback = callback; - data->user_data = user_data; data->mount_op_id = g_proxy_mount_operation_wrap (mount_operation, proxy_drive->volume_monitor); if (cancellable != NULL) { data->cancellation_id = g_strdup_printf ("%p", cancellable); - data->cancellable = g_object_ref (cancellable); - data->cancelled_handler_id = g_signal_connect (data->cancellable, + data->cancelled_handler_id = g_signal_connect (cancellable, "cancelled", G_CALLBACK (operation_cancelled), - data); + task); } else { data->cancellation_id = g_strdup (""); } + g_task_set_task_data (task, data, (GDestroyNotify)dbus_op_free); + proxy = g_proxy_volume_monitor_get_dbus_proxy (proxy_drive->volume_monitor); g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (proxy), G_PROXY_VOLUME_MONITOR_DBUS_TIMEOUT); /* 30 minute timeout */ @@ -691,15 +674,12 @@ g_proxy_drive_eject_with_operation (GDrive *drive, data->mount_op_id, NULL, (GAsyncReadyCallback) eject_cb, - data); + task); g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (proxy), -1); g_object_unref (proxy); G_UNLOCK (proxy_drive); - - out: - ; } static gboolean @@ -707,9 +687,10 @@ g_proxy_drive_eject_with_operation_finish (GDrive *drive, GAsyncResult *result, GError **error) { - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - return TRUE; + g_return_val_if_fail (g_task_is_valid (result, drive), FALSE); + g_return_val_if_fail (g_async_result_is_tagged (result, g_proxy_drive_eject_with_operation), FALSE); + + return g_task_propagate_boolean (G_TASK (result), error); } /* ---------------------------------------------------------------------------------------------------- */ @@ -739,7 +720,8 @@ stop_cb (GVfsRemoteVolumeMonitor *proxy, GAsyncResult *res, gpointer user_data) { - DBusOp *data = user_data; + GTask *task = G_TASK (user_data); + DBusOp *data = g_task_get_task_data (task); GError *error = NULL; gvfs_remote_volume_monitor_call_drive_stop_finish (proxy, @@ -747,37 +729,23 @@ stop_cb (GVfsRemoteVolumeMonitor *proxy, &error); if (data->cancelled_handler_id > 0) - g_signal_handler_disconnect (data->cancellable, data->cancelled_handler_id); + g_signal_handler_disconnect (g_task_get_cancellable (task), data->cancelled_handler_id); - if (!g_cancellable_is_cancelled (data->cancellable)) + if (!g_cancellable_is_cancelled (g_task_get_cancellable (task))) { - GSimpleAsyncResult *simple; - if (error != NULL) { g_dbus_error_strip_remote_error (error); - simple = g_simple_async_result_new_from_error (G_OBJECT (data->drive), - data->callback, - data->user_data, - error); + g_task_return_error (task, error); + error = NULL; } else { - simple = g_simple_async_result_new (G_OBJECT (data->drive), - data->callback, - data->user_data, - NULL); + g_task_return_boolean (task, TRUE); } - g_simple_async_result_complete (simple); - g_object_unref (simple); } - g_proxy_mount_operation_destroy (data->mount_op_id); - g_object_unref (data->drive); - g_free (data->cancellation_id); - if (data->cancellable != NULL) - g_object_unref (data->cancellable); - g_free (data); + g_object_unref (task); if (error != NULL) g_error_free (error); } @@ -793,44 +761,40 @@ g_proxy_drive_stop (GDrive *drive, GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive); DBusOp *data; GVfsRemoteVolumeMonitor *proxy; + GTask *task; G_LOCK (proxy_drive); + task = g_task_new (drive, cancellable, callback, user_data); + g_task_set_source_tag (task, g_proxy_drive_stop); + if (g_cancellable_is_cancelled (cancellable)) { - GSimpleAsyncResult *simple; - simple = g_simple_async_result_new_error (G_OBJECT (drive), - callback, - user_data, - G_IO_ERROR, - G_IO_ERROR_CANCELLED, - _("Operation was cancelled")); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); G_UNLOCK (proxy_drive); - goto out; + + g_task_return_error_if_cancelled (task); + g_object_unref (task); + return; } data = g_new0 (DBusOp, 1); - data->drive = g_object_ref (proxy_drive); - data->callback = callback; - data->user_data = user_data; data->mount_op_id = g_proxy_mount_operation_wrap (mount_operation, proxy_drive->volume_monitor); if (cancellable != NULL) { data->cancellation_id = g_strdup_printf ("%p", cancellable); - data->cancellable = g_object_ref (cancellable); - data->cancelled_handler_id = g_signal_connect (data->cancellable, + data->cancelled_handler_id = g_signal_connect (cancellable, "cancelled", G_CALLBACK (operation_cancelled), - data); + task); } else { data->cancellation_id = g_strdup (""); } + g_task_set_task_data (task, data, (GDestroyNotify)dbus_op_free); + proxy = g_proxy_volume_monitor_get_dbus_proxy (proxy_drive->volume_monitor); g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (proxy), G_PROXY_VOLUME_MONITOR_DBUS_TIMEOUT); /* 30 minute timeout */ @@ -841,15 +805,12 @@ g_proxy_drive_stop (GDrive *drive, data->mount_op_id, NULL, (GAsyncReadyCallback) stop_cb, - data); - + task); + g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (proxy), -1); g_object_unref (proxy); G_UNLOCK (proxy_drive); - - out: - ; } static gboolean @@ -857,72 +818,45 @@ g_proxy_drive_stop_finish (GDrive *drive, GAsyncResult *result, GError **error) { - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - return TRUE; + g_return_val_if_fail (g_task_is_valid (result, drive), FALSE); + g_return_val_if_fail (g_async_result_is_tagged (result, g_proxy_drive_stop), FALSE); + + return g_task_propagate_boolean (G_TASK (result), error); } /* ---------------------------------------------------------------------------------------------------- */ -typedef struct { - GProxyDrive *drive; - GAsyncReadyCallback callback; - gpointer user_data; - - gchar *cancellation_id; - GCancellable *cancellable; - gulong cancelled_handler_id; - - const gchar *mount_op_id; -} DBusStartOp; - static void start_cb (GVfsRemoteVolumeMonitor *proxy, GAsyncResult *res, gpointer user_data) { - DBusStartOp *data = user_data; + GTask *task = G_TASK (user_data); + DBusOp *data = g_task_get_task_data (task); GError *error = NULL; - gvfs_remote_volume_monitor_call_drive_start_finish (proxy, - res, + gvfs_remote_volume_monitor_call_drive_start_finish (proxy, + res, &error); -if (data->cancelled_handler_id > 0) - g_signal_handler_disconnect (data->cancellable, data->cancelled_handler_id); + if (data->cancelled_handler_id > 0) + g_signal_handler_disconnect (g_task_get_cancellable (task), data->cancelled_handler_id); - if (!g_cancellable_is_cancelled (data->cancellable)) + if (!g_cancellable_is_cancelled (g_task_get_cancellable (task))) { - GSimpleAsyncResult *simple; - if (error != NULL) { g_dbus_error_strip_remote_error (error); - simple = g_simple_async_result_new_from_error (G_OBJECT (data->drive), - data->callback, - data->user_data, - error); + g_task_return_error (task, error); + error = NULL; } else { - simple = g_simple_async_result_new (G_OBJECT (data->drive), - data->callback, - data->user_data, - NULL); + g_task_return_boolean (task, TRUE); } - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); } - /* free DBusStartOp */ - g_proxy_mount_operation_destroy (data->mount_op_id); - g_object_unref (data->drive); - - g_free (data->cancellation_id); - if (data->cancellable != NULL) - g_object_unref (data->cancellable); - - g_free (data); + g_object_unref (task); if (error != NULL) g_error_free (error); } @@ -931,23 +865,15 @@ static void start_cancelled (GCancellable *cancellable, gpointer user_data) { - DBusStartOp *data = user_data; - GSimpleAsyncResult *simple; + GTask *task = G_TASK (user_data); + DBusOp *data = g_task_get_task_data (task); GVfsRemoteVolumeMonitor *proxy; + GProxyDrive *drive = G_PROXY_DRIVE (g_task_get_source_object (task)); G_LOCK (proxy_drive); - simple = g_simple_async_result_new_error (G_OBJECT (data->drive), - data->callback, - data->user_data, - G_IO_ERROR, - G_IO_ERROR_CANCELLED, - _("Operation was cancelled")); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); - /* Now tell the remote drive monitor that the op has been cancelled */ - proxy = g_proxy_volume_monitor_get_dbus_proxy (data->drive->volume_monitor); + proxy = g_proxy_volume_monitor_get_dbus_proxy (drive->volume_monitor); gvfs_remote_volume_monitor_call_cancel_operation (proxy, data->cancellation_id, NULL, @@ -956,6 +882,8 @@ start_cancelled (GCancellable *cancellable, g_object_unref (proxy); G_UNLOCK (proxy_drive); + + g_task_return_error_if_cancelled (task); } static void @@ -967,38 +895,32 @@ g_proxy_drive_start (GDrive *drive, gpointer user_data) { GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive); - DBusStartOp *data; + DBusOp *data; GVfsRemoteVolumeMonitor *proxy; + GTask *task; G_LOCK (proxy_drive); + task = g_task_new (drive, cancellable, callback, user_data); + g_task_set_source_tag (task, g_proxy_drive_start); + if (g_cancellable_is_cancelled (cancellable)) { - GSimpleAsyncResult *simple; - simple = g_simple_async_result_new_error (G_OBJECT (drive), - callback, - user_data, - G_IO_ERROR, - G_IO_ERROR_CANCELLED, - _("Operation was cancelled")); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); G_UNLOCK (proxy_drive); - goto out; + + g_task_return_error_if_cancelled (task); + g_object_unref (task); + return; } - data = g_new0 (DBusStartOp, 1); - data->drive = g_object_ref (proxy_drive); - data->callback = callback; - data->user_data = user_data; + data = g_new0 (DBusOp, 1); if (cancellable != NULL) { data->cancellation_id = g_strdup_printf ("%p", cancellable); - data->cancellable = g_object_ref (cancellable); - data->cancelled_handler_id = g_signal_connect (data->cancellable, + data->cancelled_handler_id = g_signal_connect (cancellable, "cancelled", G_CALLBACK (start_cancelled), - data); + task); } else { @@ -1007,6 +929,8 @@ g_proxy_drive_start (GDrive *drive, data->mount_op_id = g_proxy_mount_operation_wrap (mount_operation, proxy_drive->volume_monitor); + g_task_set_task_data (task, data, (GDestroyNotify)dbus_op_free); + proxy = g_proxy_volume_monitor_get_dbus_proxy (proxy_drive->volume_monitor); g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (proxy), G_PROXY_VOLUME_MONITOR_DBUS_TIMEOUT); /* 30 minute timeout */ @@ -1017,14 +941,12 @@ g_proxy_drive_start (GDrive *drive, data->mount_op_id, NULL, (GAsyncReadyCallback) start_cb, - data); + task); g_dbus_proxy_set_default_timeout (G_DBUS_PROXY (proxy), -1); g_object_unref (proxy); G_UNLOCK (proxy_drive); - out: - ; } static gboolean @@ -1032,9 +954,10 @@ g_proxy_drive_start_finish (GDrive *drive, GAsyncResult *result, GError **error) { - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - return TRUE; + g_return_val_if_fail (g_task_is_valid (result, drive), FALSE); + g_return_val_if_fail (g_async_result_is_tagged (result, g_proxy_drive_start), FALSE); + + return g_task_propagate_boolean (G_TASK (result), error); } /* ---------------------------------------------------------------------------------------------------- */ @@ -1044,43 +967,32 @@ poll_for_media_cb (GVfsRemoteVolumeMonitor *proxy, GAsyncResult *res, gpointer user_data) { - DBusOp *data = user_data; + GTask *task = G_TASK (user_data); + DBusOp *data = g_task_get_task_data (task); GError *error = NULL; gvfs_remote_volume_monitor_call_drive_poll_for_media_finish (proxy, res, &error); - if (!g_cancellable_is_cancelled (data->cancellable)) + if (!g_cancellable_is_cancelled (g_task_get_cancellable (task))) { - GSimpleAsyncResult *simple; - if (error != NULL) { g_dbus_error_strip_remote_error (error); - simple = g_simple_async_result_new_from_error (G_OBJECT (data->drive), - data->callback, - data->user_data, - error); + g_task_return_error (task, error); + error = NULL; } else { - simple = g_simple_async_result_new (G_OBJECT (data->drive), - data->callback, - data->user_data, - NULL); + g_task_return_boolean (task, TRUE); } - g_simple_async_result_complete (simple); - g_object_unref (simple); } - g_object_unref (data->drive); - g_free (data->cancellation_id); if (data->cancelled_handler_id > 0) - g_signal_handler_disconnect (data->cancellable, data->cancelled_handler_id); - if (data->cancellable != NULL) - g_object_unref (data->cancellable); - g_free (data); + g_signal_handler_disconnect (g_task_get_cancellable (task), data->cancelled_handler_id); + + g_object_unref (task); if (error != NULL) g_error_free (error); } @@ -1094,55 +1006,48 @@ g_proxy_drive_poll_for_media (GDrive *drive, GProxyDrive *proxy_drive = G_PROXY_DRIVE (drive); DBusOp *data; GVfsRemoteVolumeMonitor *proxy; + GTask *task; G_LOCK (proxy_drive); + task = g_task_new (drive, cancellable, callback, user_data); + g_task_set_source_tag (task, g_proxy_drive_poll_for_media); + if (g_cancellable_is_cancelled (cancellable)) { - GSimpleAsyncResult *simple; - simple = g_simple_async_result_new_error (G_OBJECT (drive), - callback, - user_data, - G_IO_ERROR, - G_IO_ERROR_CANCELLED, - _("Operation was cancelled")); - g_simple_async_result_complete_in_idle (simple); - g_object_unref (simple); G_UNLOCK (proxy_drive); - goto out; + + g_task_return_error_if_cancelled (task); + g_object_unref (task); + return; } data = g_new0 (DBusOp, 1); - data->drive = g_object_ref (proxy_drive); - data->callback = callback; - data->user_data = user_data; - if (cancellable != NULL) { data->cancellation_id = g_strdup_printf ("%p", cancellable); - data->cancellable = g_object_ref (cancellable); - data->cancelled_handler_id = g_signal_connect (data->cancellable, + data->cancelled_handler_id = g_signal_connect (cancellable, "cancelled", G_CALLBACK (operation_cancelled), - data); + task); } else { data->cancellation_id = g_strdup (""); } - + + g_task_set_task_data (task, data, (GDestroyNotify)dbus_op_free); + proxy = g_proxy_volume_monitor_get_dbus_proxy (proxy_drive->volume_monitor); gvfs_remote_volume_monitor_call_drive_poll_for_media (proxy, proxy_drive->id, data->cancellation_id, NULL, (GAsyncReadyCallback) poll_for_media_cb, - data); + task); g_object_unref (proxy); G_UNLOCK (proxy_drive); - out: - ; } static gboolean @@ -1150,9 +1055,10 @@ g_proxy_drive_poll_for_media_finish (GDrive *drive, GAsyncResult *result, GError **error) { - if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error)) - return FALSE; - return TRUE; + g_return_val_if_fail (g_task_is_valid (result, drive), FALSE); + g_return_val_if_fail (g_async_result_is_tagged (result, g_proxy_drive_poll_for_media), FALSE); + + return g_task_propagate_boolean (G_TASK (result), error); } /* ---------------------------------------------------------------------------------------------------- */ |