summaryrefslogtreecommitdiff
path: root/monitor
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2016-07-26 11:40:56 +0200
committerOndrej Holy <oholy@redhat.com>2017-11-28 14:51:56 +0100
commit5af38d0d3f00b8d1eab7c6dbc0906a853621836b (patch)
tree9c1bdd265e9a49ef36da16ff836a18d3f8c3250d /monitor
parent42e740c56b9d572c02fca4d7ac117de3d2e1f284 (diff)
downloadgvfs-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.c356
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);
}
/* ---------------------------------------------------------------------------------------------------- */