summaryrefslogtreecommitdiff
path: root/gio/gfile.c
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2012-08-02 15:50:35 -0400
committerDan Winship <danw@gnome.org>2012-12-18 09:07:24 -0500
commited5accf16c03cc3ec5d54a457163a747d580b49d (patch)
tree0ff7d5293a7e15cc434d2a1f03d966e95844a5be /gio/gfile.c
parent669505e354a843efb2e198d4b56e310fa6a69b9a (diff)
downloadglib-ed5accf16c03cc3ec5d54a457163a747d580b49d.tar.gz
glib-ed5accf16c03cc3ec5d54a457163a747d580b49d.tar.bz2
glib-ed5accf16c03cc3ec5d54a457163a747d580b49d.zip
gio: port file/vfs-related classes from GSimpleAsyncResult to GTask
https://bugzilla.gnome.org/show_bug.cgi?id=661767
Diffstat (limited to 'gio/gfile.c')
-rw-r--r--gio/gfile.c933
1 files changed, 344 insertions, 589 deletions
diff --git a/gio/gfile.c b/gio/gfile.c
index b18f36d8f..ba8c4da4b 100644
--- a/gio/gfile.c
+++ b/gio/gfile.c
@@ -36,8 +36,7 @@
#endif
#include "gfile.h"
#include "gvfs.h"
-#include "gioscheduler.h"
-#include "gsimpleasyncresult.h"
+#include "gtask.h"
#include "gfileattribute-priv.h"
#include "gfiledescriptorbased.h"
#include "gpollfilemonitor.h"
@@ -4414,12 +4413,10 @@ g_file_mount_mountable (GFile *file,
if (iface->mount_mountable == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_mount_mountable,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -4457,6 +4454,8 @@ g_file_mount_mountable_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return NULL;
+ else if (g_async_result_is_tagged (result, g_file_mount_mountable))
+ return g_task_propagate_pointer (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
return (* iface->mount_mountable_finish) (file, result, error);
@@ -4499,12 +4498,10 @@ g_file_unmount_mountable (GFile *file,
if (iface->unmount_mountable == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_unmount_mountable_with_operation,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -4544,6 +4541,8 @@ g_file_unmount_mountable_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_unmount_mountable_with_operation))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
return (* iface->unmount_mountable_finish) (file, result, error);
@@ -4589,12 +4588,10 @@ g_file_unmount_mountable_with_operation (GFile *file,
if (iface->unmount_mountable == NULL && iface->unmount_mountable_with_operation == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_unmount_mountable_with_operation,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -4642,6 +4639,8 @@ g_file_unmount_mountable_with_operation_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_unmount_mountable_with_operation))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
if (iface->unmount_mountable_with_operation_finish != NULL)
@@ -4686,12 +4685,10 @@ g_file_eject_mountable (GFile *file,
if (iface->eject_mountable == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_eject_mountable_with_operation,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -4729,6 +4726,8 @@ g_file_eject_mountable_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_eject_mountable_with_operation))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
return (* iface->eject_mountable_finish) (file, result, error);
@@ -4773,12 +4772,10 @@ g_file_eject_mountable_with_operation (GFile *file,
if (iface->eject_mountable == NULL && iface->eject_mountable_with_operation == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_eject_mountable_with_operation,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -4823,6 +4820,8 @@ g_file_eject_mountable_with_operation_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_eject_mountable_with_operation))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
if (iface->eject_mountable_with_operation_finish != NULL)
@@ -4964,34 +4963,30 @@ g_file_monitor (GFile *file,
typedef struct {
char *attributes;
GFileQueryInfoFlags flags;
- GFileInfo *info;
} QueryInfoAsyncData;
static void
query_info_data_free (QueryInfoAsyncData *data)
{
- if (data->info)
- g_object_unref (data->info);
g_free (data->attributes);
g_free (data);
}
static void
-query_info_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+query_info_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- GError *error = NULL;
- QueryInfoAsyncData *data;
+ QueryInfoAsyncData *data = task_data;
GFileInfo *info;
+ GError *error = NULL;
- data = g_simple_async_result_get_op_res_gpointer (res);
info = g_file_query_info (G_FILE (object), data->attributes, data->flags, cancellable, &error);
-
- if (info == NULL)
- g_simple_async_result_take_error (res, error);
+ if (info)
+ g_task_return_pointer (task, info, g_object_unref);
else
- data->info = info;
+ g_task_return_error (task, error);
}
static void
@@ -5003,18 +4998,18 @@ g_file_real_query_info_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
QueryInfoAsyncData *data;
data = g_new0 (QueryInfoAsyncData, 1);
data->attributes = g_strdup (attributes);
data->flags = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_query_info_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_info_data_free);
-
- g_simple_async_result_run_in_thread (res, query_info_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, (GDestroyNotify)query_info_data_free);
+ g_task_set_priority (task, io_priority);
+ g_task_run_in_thread (task, query_info_async_thread);
+ g_object_unref (task);
}
static GFileInfo *
@@ -5022,52 +5017,26 @@ g_file_real_query_info_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- QueryInfoAsyncData *data;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_query_info_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
- if (data->info)
- return g_object_ref (data->info);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
-typedef struct {
- char *attributes;
- GFileInfo *info;
-} QueryFilesystemInfoAsyncData;
-
static void
-query_filesystem_info_data_free (QueryFilesystemInfoAsyncData *data)
+query_filesystem_info_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- if (data->info)
- g_object_unref (data->info);
- g_free (data->attributes);
- g_free (data);
-}
-
-static void
-query_filesystem_info_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
-{
- GError *error = NULL;
- QueryFilesystemInfoAsyncData *data;
+ const char *attributes = task_data;
GFileInfo *info;
+ GError *error = NULL;
- data = g_simple_async_result_get_op_res_gpointer (res);
-
- info = g_file_query_filesystem_info (G_FILE (object), data->attributes, cancellable, &error);
-
- if (info == NULL)
- g_simple_async_result_take_error (res, error);
+ info = g_file_query_filesystem_info (G_FILE (object), attributes, cancellable, &error);
+ if (info)
+ g_task_return_pointer (task, info, g_object_unref);
else
- data->info = info;
+ g_task_return_error (task, error);
}
static void
@@ -5078,17 +5047,13 @@ g_file_real_query_filesystem_info_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
- QueryFilesystemInfoAsyncData *data;
-
- data = g_new0 (QueryFilesystemInfoAsyncData, 1);
- data->attributes = g_strdup (attributes);
-
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_query_filesystem_info_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)query_filesystem_info_data_free);
+ GTask *task;
- g_simple_async_result_run_in_thread (res, query_filesystem_info_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, g_strdup (attributes), g_free);
+ g_task_set_priority (task, io_priority);
+ g_task_run_in_thread (task, query_filesystem_info_async_thread);
+ g_object_unref (task);
}
static GFileInfo *
@@ -5096,53 +5061,26 @@ g_file_real_query_filesystem_info_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- QueryFilesystemInfoAsyncData *data;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_query_filesystem_info_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
- if (data->info)
- return g_object_ref (data->info);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
-typedef struct {
- char *attributes;
- GFileQueryInfoFlags flags;
- GFileEnumerator *enumerator;
-} EnumerateChildrenAsyncData;
-
static void
-enumerate_children_data_free (EnumerateChildrenAsyncData *data)
+enumerate_children_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- if (data->enumerator)
- g_object_unref (data->enumerator);
- g_free (data->attributes);
- g_free (data);
-}
-
-static void
-enumerate_children_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
-{
- GError *error = NULL;
- EnumerateChildrenAsyncData *data;
+ QueryInfoAsyncData *data = task_data;
GFileEnumerator *enumerator;
-
- data = g_simple_async_result_get_op_res_gpointer (res);
+ GError *error = NULL;
enumerator = g_file_enumerate_children (G_FILE (object), data->attributes, data->flags, cancellable, &error);
-
- if (enumerator == NULL)
- g_simple_async_result_take_error (res, error);
+ if (error)
+ g_task_return_error (task, error);
else
- data->enumerator = enumerator;
+ g_task_return_pointer (task, enumerator, g_object_unref);
}
static void
@@ -5154,18 +5092,18 @@ g_file_real_enumerate_children_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
- EnumerateChildrenAsyncData *data;
+ GTask *task;
+ QueryInfoAsyncData *data;
- data = g_new0 (EnumerateChildrenAsyncData, 1);
+ data = g_new0 (QueryInfoAsyncData, 1);
data->attributes = g_strdup (attributes);
data->flags = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_enumerate_children_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)enumerate_children_data_free);
-
- g_simple_async_result_run_in_thread (res, enumerate_children_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, (GDestroyNotify)query_info_data_free);
+ g_task_set_priority (task, io_priority);
+ g_task_run_in_thread (task, enumerate_children_async_thread);
+ g_object_unref (task);
}
static GFileEnumerator *
@@ -5173,25 +5111,16 @@ g_file_real_enumerate_children_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- EnumerateChildrenAsyncData *data;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_enumerate_children_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- data = g_simple_async_result_get_op_res_gpointer (simple);
- if (data->enumerator)
- return g_object_ref (data->enumerator);
-
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-open_read_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+open_read_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
GFileInputStream *stream;
@@ -5201,21 +5130,17 @@ open_read_async_thread (GSimpleAsyncResult *res,
if (iface->read_fn == NULL)
{
- g_set_error_literal (&error, G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
-
- g_simple_async_result_take_error (res, error);
-
+ g_task_return_new_error (task, G_IO_ERROR,
+ G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
stream = iface->read_fn (G_FILE (object), cancellable, &error);
-
- if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ if (stream)
+ g_task_return_pointer (task, stream, g_object_unref);
else
- g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+ g_task_return_error (task, error);
}
static void
@@ -5225,12 +5150,12 @@ g_file_real_read_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
-
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_read_async);
+ GTask *task;
- g_simple_async_result_run_in_thread (res, open_read_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_priority (task, io_priority);
+ g_task_run_in_thread (task, open_read_async_thread);
+ g_object_unref (task);
}
static GFileInputStream *
@@ -5238,41 +5163,29 @@ g_file_real_read_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- gpointer op;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_read_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- op = g_simple_async_result_get_op_res_gpointer (simple);
- if (op)
- return g_object_ref (op);
-
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-append_to_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+append_to_async_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
- GFileCreateFlags *data;
+ GFileCreateFlags *data = task_data;
GFileOutputStream *stream;
GError *error = NULL;
- iface = G_FILE_GET_IFACE (object);
-
- data = g_simple_async_result_get_op_res_gpointer (res);
-
- stream = iface->append_to (G_FILE (object), *data, cancellable, &error);
+ iface = G_FILE_GET_IFACE (source_object);
- if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ stream = iface->append_to (G_FILE (source_object), *data, cancellable, &error);
+ if (stream)
+ g_task_return_pointer (task, stream, g_object_unref);
else
- g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+ g_task_return_error (task, error);
}
static void
@@ -5284,16 +5197,17 @@ g_file_real_append_to_async (GFile *file,
gpointer user_data)
{
GFileCreateFlags *data;
- GSimpleAsyncResult *res;
+ GTask *task;
data = g_new0 (GFileCreateFlags, 1);
*data = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_append_to_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)g_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, g_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, append_to_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, append_to_async_thread);
+ g_object_unref (task);
}
static GFileOutputStream *
@@ -5301,41 +5215,29 @@ g_file_real_append_to_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- gpointer op;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_append_to_async);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- op = g_simple_async_result_get_op_res_gpointer (simple);
- if (op)
- return g_object_ref (op);
-
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-create_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+create_async_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
- GFileCreateFlags *data;
+ GFileCreateFlags *data = task_data;
GFileOutputStream *stream;
GError *error = NULL;
- iface = G_FILE_GET_IFACE (object);
-
- data = g_simple_async_result_get_op_res_gpointer (res);
-
- stream = iface->create (G_FILE (object), *data, cancellable, &error);
+ iface = G_FILE_GET_IFACE (source_object);
- if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ stream = iface->create (G_FILE (source_object), *data, cancellable, &error);
+ if (stream)
+ g_task_return_pointer (task, stream, g_object_unref);
else
- g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+ g_task_return_error (task, error);
}
static void
@@ -5347,16 +5249,17 @@ g_file_real_create_async (GFile *file,
gpointer user_data)
{
GFileCreateFlags *data;
- GSimpleAsyncResult *res;
+ GTask *task;
data = g_new0 (GFileCreateFlags, 1);
*data = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_create_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)g_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, g_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, create_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, create_async_thread);
+ g_object_unref (task);
}
static GFileOutputStream *
@@ -5364,19 +5267,9 @@ g_file_real_create_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- gpointer op;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_create_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- op = g_simple_async_result_get_op_res_gpointer (simple);
- if (op)
- return g_object_ref (op);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
typedef struct {
@@ -5396,30 +5289,29 @@ replace_async_data_free (ReplaceAsyncData *data)
}
static void
-replace_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+replace_async_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
GFileOutputStream *stream;
+ ReplaceAsyncData *data = task_data;
GError *error = NULL;
- ReplaceAsyncData *data;
- iface = G_FILE_GET_IFACE (object);
-
- data = g_simple_async_result_get_op_res_gpointer (res);
+ iface = G_FILE_GET_IFACE (source_object);
- stream = iface->replace (G_FILE (object),
+ stream = iface->replace (G_FILE (source_object),
data->etag,
data->make_backup,
data->flags,
cancellable,
&error);
- if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ if (stream)
+ g_task_return_pointer (task, stream, g_object_unref);
else
- data->stream = stream;
+ g_task_return_error (task, error);
}
static void
@@ -5432,7 +5324,7 @@ g_file_real_replace_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
ReplaceAsyncData *data;
data = g_new0 (ReplaceAsyncData, 1);
@@ -5440,11 +5332,12 @@ g_file_real_replace_async (GFile *file,
data->make_backup = make_backup;
data->flags = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_replace_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)replace_async_data_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, (GDestroyNotify)replace_async_data_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, replace_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, replace_async_thread);
+ g_object_unref (task);
}
static GFileOutputStream *
@@ -5452,35 +5345,29 @@ g_file_real_replace_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- ReplaceAsyncData *data;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_replace_async);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
- if (data->stream)
- return g_object_ref (data->stream);
-
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-delete_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+delete_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
+ GFile *file = object;
GFileIface *iface;
GError *error = NULL;
iface = G_FILE_GET_IFACE (object);
- if (!iface->delete_file (G_FILE (object),
- cancellable,
- &error))
- g_simple_async_result_take_error (res, error);
+ if (iface->delete_file (file,
+ cancellable,
+ &error))
+ g_task_return_boolean (task, TRUE);
+ else
+ g_task_return_error (task, error);
}
static void
@@ -5490,11 +5377,12 @@ g_file_real_delete_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_delete_async);
- g_simple_async_result_run_in_thread (res, delete_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_priority (task, io_priority);
+ g_task_run_in_thread (task, delete_async_thread);
+ g_object_unref (task);
}
static gboolean
@@ -5502,20 +5390,16 @@ g_file_real_delete_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_delete_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return FALSE;
+ g_return_val_if_fail (g_task_is_valid (res, file), FALSE);
- return TRUE;
+ return g_task_propagate_boolean (G_TASK (res), error);
}
static void
-open_readwrite_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+open_readwrite_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
GFileIOStream *stream;
@@ -5525,21 +5409,17 @@ open_readwrite_async_thread (GSimpleAsyncResult *res,
if (iface->open_readwrite == NULL)
{
- g_set_error_literal (&error, G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
-
- g_simple_async_result_take_error (res, error);
-
+ g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
stream = iface->open_readwrite (G_FILE (object), cancellable, &error);
if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+ g_task_return_pointer (task, stream, g_object_unref);
}
static void
@@ -5549,12 +5429,13 @@ g_file_real_open_readwrite_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_open_readwrite_async);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, open_readwrite_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, open_readwrite_async_thread);
+ g_object_unref (task);
}
static GFileIOStream *
@@ -5562,52 +5443,37 @@ g_file_real_open_readwrite_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- gpointer op;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_open_readwrite_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- op = g_simple_async_result_get_op_res_gpointer (simple);
- if (op)
- return g_object_ref (op);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-create_readwrite_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+create_readwrite_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
- GFileCreateFlags *data;
+ GFileCreateFlags *data = task_data;
GFileIOStream *stream;
GError *error = NULL;
iface = G_FILE_GET_IFACE (object);
- data = g_simple_async_result_get_op_res_gpointer (res);
-
if (iface->create_readwrite == NULL)
{
- g_set_error_literal (&error, G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
-
- g_simple_async_result_take_error (res, error);
-
+ g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
stream = iface->create_readwrite (G_FILE (object), *data, cancellable, &error);
if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gpointer (res, stream, g_object_unref);
+ g_task_return_pointer (task, stream, g_object_unref);
}
static void
@@ -5619,16 +5485,17 @@ g_file_real_create_readwrite_async (GFile *file,
gpointer user_data)
{
GFileCreateFlags *data;
- GSimpleAsyncResult *res;
+ GTask *task;
data = g_new0 (GFileCreateFlags, 1);
*data = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_create_readwrite_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)g_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, g_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, create_readwrite_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, create_readwrite_async_thread);
+ g_object_unref (task);
}
static GFileIOStream *
@@ -5636,23 +5503,12 @@ g_file_real_create_readwrite_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- gpointer op;
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_create_readwrite_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- op = g_simple_async_result_get_op_res_gpointer (simple);
- if (op)
- return g_object_ref (op);
-
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
typedef struct {
- GFileIOStream *stream;
char *etag;
gboolean make_backup;
GFileCreateFlags flags;
@@ -5661,26 +5517,23 @@ typedef struct {
static void
replace_rw_async_data_free (ReplaceRWAsyncData *data)
{
- if (data->stream)
- g_object_unref (data->stream);
g_free (data->etag);
g_free (data);
}
static void
-replace_readwrite_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+replace_readwrite_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GFileIface *iface;
GFileIOStream *stream;
GError *error = NULL;
- ReplaceRWAsyncData *data;
+ ReplaceRWAsyncData *data = task_data;
iface = G_FILE_GET_IFACE (object);
- data = g_simple_async_result_get_op_res_gpointer (res);
-
stream = iface->replace_readwrite (G_FILE (object),
data->etag,
data->make_backup,
@@ -5689,9 +5542,9 @@ replace_readwrite_async_thread (GSimpleAsyncResult *res,
&error);
if (stream == NULL)
- g_simple_async_result_take_error (res, error);
+ g_task_return_error (task, error);
else
- data->stream = stream;
+ g_task_return_pointer (task, stream, g_object_unref);
}
static void
@@ -5704,7 +5557,7 @@ g_file_real_replace_readwrite_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
ReplaceRWAsyncData *data;
data = g_new0 (ReplaceRWAsyncData, 1);
@@ -5712,11 +5565,12 @@ g_file_real_replace_readwrite_async (GFile *file,
data->make_backup = make_backup;
data->flags = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_replace_readwrite_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)replace_rw_async_data_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, (GDestroyNotify)replace_rw_async_data_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, replace_readwrite_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, replace_readwrite_async_thread);
+ g_object_unref (task);
}
static GFileIOStream *
@@ -5724,52 +5578,27 @@ g_file_real_replace_readwrite_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- ReplaceRWAsyncData *data;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_replace_readwrite_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
- if (data->stream)
- return g_object_ref (data->stream);
-
- return NULL;
-}
-
-typedef struct {
- char *name;
- GFile *file;
-} SetDisplayNameAsyncData;
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
-static void
-set_display_name_data_free (SetDisplayNameAsyncData *data)
-{
- g_free (data->name);
- if (data->file)
- g_object_unref (data->file);
- g_free (data);
+ return g_task_propagate_pointer (G_TASK (res), error);
}
static void
-set_display_name_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+set_display_name_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GError *error = NULL;
- SetDisplayNameAsyncData *data;
+ char *name = task_data;
GFile *file;
- data = g_simple_async_result_get_op_res_gpointer (res);
-
- file = g_file_set_display_name (G_FILE (object), data->name, cancellable, &error);
+ file = g_file_set_display_name (G_FILE (object), name, cancellable, &error);
if (file == NULL)
- g_simple_async_result_take_error (res, error);
+ g_task_return_error (task, error);
else
- data->file = file;
+ g_task_return_pointer (task, file, g_object_unref);
}
static void
@@ -5780,17 +5609,14 @@ g_file_real_set_display_name_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
- SetDisplayNameAsyncData *data;
-
- data = g_new0 (SetDisplayNameAsyncData, 1);
- data->name = g_strdup (display_name);
+ GTask *task;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_set_display_name_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)set_display_name_data_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, g_strdup (display_name), g_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, set_display_name_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, set_display_name_async_thread);
+ g_object_unref (task);
}
static GFile *
@@ -5798,19 +5624,9 @@ g_file_real_set_display_name_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- SetDisplayNameAsyncData *data;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_set_display_name_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
- if (data->file)
- return g_object_ref (data->file);
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- return NULL;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
typedef struct {
@@ -5831,13 +5647,12 @@ set_info_data_free (SetInfoAsyncData *data)
}
static void
-set_info_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+set_info_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- SetInfoAsyncData *data;
-
- data = g_simple_async_result_get_op_res_gpointer (res);
+ SetInfoAsyncData *data = task_data;
data->error = NULL;
data->res = g_file_set_attributes_from_info (G_FILE (object),
@@ -5856,18 +5671,19 @@ g_file_real_set_attributes_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
SetInfoAsyncData *data;
data = g_new0 (SetInfoAsyncData, 1);
data->info = g_file_info_dup (info);
data->flags = flags;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_set_attributes_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)set_info_data_free);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (task, data, (GDestroyNotify)set_info_data_free);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, set_info_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, set_info_async_thread);
+ g_object_unref (task);
}
static gboolean
@@ -5876,12 +5692,11 @@ g_file_real_set_attributes_finish (GFile *file,
GFileInfo **info,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
SetInfoAsyncData *data;
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_set_attributes_async);
+ g_return_val_if_fail (g_task_is_valid (res, file), FALSE);
- data = g_simple_async_result_get_op_res_gpointer (simple);
+ data = g_task_get_task_data (G_TASK (res));
if (info)
*info = g_object_ref (data->info);
@@ -5893,9 +5708,10 @@ g_file_real_set_attributes_finish (GFile *file,
}
static void
-find_enclosing_mount_async_thread (GSimpleAsyncResult *res,
- GObject *object,
- GCancellable *cancellable)
+find_enclosing_mount_async_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
GError *error = NULL;
GMount *mount;
@@ -5903,9 +5719,9 @@ find_enclosing_mount_async_thread (GSimpleAsyncResult *res,
mount = g_file_find_enclosing_mount (G_FILE (object), cancellable, &error);
if (mount == NULL)
- g_simple_async_result_take_error (res, error);
+ g_task_return_error (task, error);
else
- g_simple_async_result_set_op_res_gpointer (res, mount, (GDestroyNotify)g_object_unref);
+ g_task_return_pointer (task, mount, g_object_unref);
}
static void
@@ -5915,29 +5731,23 @@ g_file_real_find_enclosing_mount_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *res;
+ GTask *task;
- res = g_simple_async_result_new (G_OBJECT (file), callback, user_data, g_file_real_find_enclosing_mount_async);
+ task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_priority (task, io_priority);
- g_simple_async_result_run_in_thread (res, find_enclosing_mount_async_thread, io_priority, cancellable);
- g_object_unref (res);
+ g_task_run_in_thread (task, find_enclosing_mount_async_thread);
+ g_object_unref (task);
}
static GMount *
g_file_real_find_enclosing_mount_finish (GFile *file,
- GAsyncResult *res,
- GError **error)
+ GAsyncResult *res,
+ GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GMount *mount;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_real_find_enclosing_mount_async);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
+ g_return_val_if_fail (g_task_is_valid (res, file), NULL);
- mount = g_simple_async_result_get_op_res_gpointer (simple);
- return g_object_ref (mount);
+ return g_task_propagate_pointer (G_TASK (res), error);
}
@@ -6053,6 +5863,8 @@ g_file_real_copy_finish (GFile *file,
GAsyncResult *res,
GError **error)
{
+ g_return_val_if_fail (g_task_is_valid (res, file), FALSE);
+
return g_task_propagate_boolean (G_TASK (res), error);
}
@@ -6317,11 +6129,10 @@ g_file_mount_enclosing_volume (GFile *location,
if (iface->mount_enclosing_volume == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (location),
- callback, user_data,
- G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("volume doesn't implement mount"));
-
+ g_task_report_new_error (location, callback, user_data,
+ g_file_mount_enclosing_volume,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("volume doesn't implement mount"));
return;
}
@@ -6353,6 +6164,8 @@ g_file_mount_enclosing_volume_finish (GFile *location,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_mount_enclosing_volume))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (location);
@@ -6529,12 +6342,8 @@ g_file_load_contents (GFile *file,
}
typedef struct {
- GFile *file;
- GError *error;
- GCancellable *cancellable;
+ GTask *task;
GFileReadMoreCallback read_more_callback;
- GAsyncReadyCallback callback;
- gpointer user_data;
GByteArray *content;
gsize pos;
char *etag;
@@ -6544,14 +6353,9 @@ typedef struct {
static void
load_contents_data_free (LoadContentsData *data)
{
- if (data->error)
- g_error_free (data->error);
- if (data->cancellable)
- g_object_unref (data->cancellable);
if (data->content)
g_byte_array_free (data->content, TRUE);
g_free (data->etag);
- g_object_unref (data->file);
g_free (data);
}
@@ -6562,19 +6366,13 @@ load_contents_close_callback (GObject *obj,
{
GInputStream *stream = G_INPUT_STREAM (obj);
LoadContentsData *data = user_data;
- GSimpleAsyncResult *res;
/* Ignore errors here, we're only reading anyway */
g_input_stream_close_finish (stream, close_res, NULL);
g_object_unref (stream);
- res = g_simple_async_result_new (G_OBJECT (data->file),
- data->callback,
- data->user_data,
- g_file_load_contents_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)load_contents_data_free);
- g_simple_async_result_complete (res);
- g_object_unref (res);
+ g_task_return_boolean (data->task, TRUE);
+ g_object_unref (data->task);
}
static void
@@ -6587,7 +6385,7 @@ load_contents_fstat_callback (GObject *obj,
GFileInfo *info;
info = g_file_input_stream_query_info_finish (G_FILE_INPUT_STREAM (stream),
- stat_res, NULL);
+ stat_res, NULL);
if (info)
{
data->etag = g_strdup (g_file_info_get_etag (info));
@@ -6595,7 +6393,7 @@ load_contents_fstat_callback (GObject *obj,
}
g_input_stream_close_async (stream, 0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
load_contents_close_callback, data);
}
@@ -6613,10 +6411,10 @@ load_contents_read_callback (GObject *obj,
if (read_size < 0)
{
- /* Error or EOF, close the file */
- data->error = error;
+ /* EOF, close the file */
+ g_task_return_error (data->task, error);
g_input_stream_close_async (stream, 0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
load_contents_close_callback, data);
}
else if (read_size == 0)
@@ -6624,7 +6422,7 @@ load_contents_read_callback (GObject *obj,
g_file_input_stream_query_info_async (G_FILE_INPUT_STREAM (stream),
G_FILE_ATTRIBUTE_ETAG_VALUE,
0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
load_contents_fstat_callback,
data);
}
@@ -6637,11 +6435,12 @@ load_contents_read_callback (GObject *obj,
if (data->read_more_callback &&
- !data->read_more_callback ((char *)data->content->data, data->pos, data->user_data))
+ !data->read_more_callback ((char *)data->content->data, data->pos,
+ g_async_result_get_user_data (G_ASYNC_RESULT (data->task))))
g_file_input_stream_query_info_async (G_FILE_INPUT_STREAM (stream),
G_FILE_ATTRIBUTE_ETAG_VALUE,
0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
load_contents_fstat_callback,
data);
else
@@ -6649,7 +6448,7 @@ load_contents_read_callback (GObject *obj,
data->content->data + data->pos,
GET_CONTENT_BLOCK_SIZE,
0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
load_contents_read_callback,
data);
}
@@ -6664,7 +6463,6 @@ load_contents_open_callback (GObject *obj,
GFileInputStream *stream;
LoadContentsData *data = user_data;
GError *error = NULL;
- GSimpleAsyncResult *res;
stream = g_file_read_finish (file, open_res, &error);
@@ -6676,19 +6474,14 @@ load_contents_open_callback (GObject *obj,
data->content->data + data->pos,
GET_CONTENT_BLOCK_SIZE,
0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
load_contents_read_callback,
data);
}
else
{
- res = g_simple_async_result_new_take_error (G_OBJECT (data->file),
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (res);
- load_contents_data_free (data);
- g_object_unref (res);
+ g_task_return_error (data->task, error);
+ g_object_unref (data->task);
}
}
@@ -6725,18 +6518,15 @@ g_file_load_partial_contents_async (GFile *file,
g_return_if_fail (G_IS_FILE (file));
data = g_new0 (LoadContentsData, 1);
-
- if (cancellable)
- data->cancellable = g_object_ref (cancellable);
data->read_more_callback = read_more_callback;
- data->callback = callback;
- data->user_data = user_data;
data->content = g_byte_array_new ();
- data->file = g_object_ref (file);
+
+ data->task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (data->task, data, (GDestroyNotify)load_contents_data_free);
g_file_read_async (file,
0,
- cancellable,
+ g_task_get_cancellable (data->task),
load_contents_open_callback,
data);
}
@@ -6769,32 +6559,24 @@ g_file_load_partial_contents_finish (GFile *file,
char **etag_out,
GError **error)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
LoadContentsData *data;
g_return_val_if_fail (G_IS_FILE (file), FALSE);
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+ g_return_val_if_fail (g_task_is_valid (res, file), FALSE);
g_return_val_if_fail (contents != NULL, FALSE);
- simple = G_SIMPLE_ASYNC_RESULT (res);
+ task = G_TASK (res);
- if (g_simple_async_result_propagate_error (simple, error))
- return FALSE;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_load_contents_async);
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
-
- if (data->error)
+ if (!g_task_propagate_boolean (task, error))
{
- g_propagate_error (error, data->error);
- data->error = NULL;
- *contents = NULL;
if (length)
*length = 0;
return FALSE;
}
+ data = g_task_get_task_data (task);
+
if (length)
*length = data->pos;
@@ -6973,25 +6755,17 @@ g_file_replace_contents (GFile *file,
}
typedef struct {
- GFile *file;
- GError *error;
- GCancellable *cancellable;
- GAsyncReadyCallback callback;
- gpointer user_data;
+ GTask *task;
const char *content;
gsize length;
gsize pos;
char *etag;
+ gboolean failed;
} ReplaceContentsData;
static void
replace_contents_data_free (ReplaceContentsData *data)
{
- if (data->error)
- g_error_free (data->error);
- if (data->cancellable)
- g_object_unref (data->cancellable);
- g_object_unref (data->file);
g_free (data->etag);
g_free (data);
}
@@ -7003,21 +6777,17 @@ replace_contents_close_callback (GObject *obj,
{
GOutputStream *stream = G_OUTPUT_STREAM (obj);
ReplaceContentsData *data = user_data;
- GSimpleAsyncResult *res;
/* Ignore errors here, we're only reading anyway */
g_output_stream_close_finish (stream, close_res, NULL);
g_object_unref (stream);
- data->etag = g_file_output_stream_get_etag (G_FILE_OUTPUT_STREAM (stream));
-
- res = g_simple_async_result_new (G_OBJECT (data->file),
- data->callback,
- data->user_data,
- g_file_replace_contents_async);
- g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify)replace_contents_data_free);
- g_simple_async_result_complete (res);
- g_object_unref (res);
+ if (!data->failed)
+ {
+ data->etag = g_file_output_stream_get_etag (G_FILE_OUTPUT_STREAM (stream));
+ g_task_return_boolean (data->task, TRUE);
+ }
+ g_object_unref (data->task);
}
static void
@@ -7036,9 +6806,12 @@ replace_contents_write_callback (GObject *obj,
{
/* Error or EOF, close the file */
if (write_size < 0)
- data->error = error;
+ {
+ data->failed = TRUE;
+ g_task_return_error (data->task, error);
+ }
g_output_stream_close_async (stream, 0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
replace_contents_close_callback, data);
}
else if (write_size > 0)
@@ -7047,14 +6820,14 @@ replace_contents_write_callback (GObject *obj,
if (data->pos >= data->length)
g_output_stream_close_async (stream, 0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
replace_contents_close_callback, data);
else
g_output_stream_write_async (stream,
data->content + data->pos,
data->length - data->pos,
0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
replace_contents_write_callback,
data);
}
@@ -7069,7 +6842,6 @@ replace_contents_open_callback (GObject *obj,
GFileOutputStream *stream;
ReplaceContentsData *data = user_data;
GError *error = NULL;
- GSimpleAsyncResult *res;
stream = g_file_replace_finish (file, open_res, &error);
@@ -7079,19 +6851,14 @@ replace_contents_open_callback (GObject *obj,
data->content + data->pos,
data->length - data->pos,
0,
- data->cancellable,
+ g_task_get_cancellable (data->task),
replace_contents_write_callback,
data);
}
else
{
- res = g_simple_async_result_new_take_error (G_OBJECT (data->file),
- data->callback,
- data->user_data,
- error);
- g_simple_async_result_complete (res);
- replace_contents_data_free (data);
- g_object_unref (res);
+ g_task_return_error (data->task, error);
+ g_object_unref (data->task);
}
}
@@ -7140,21 +6907,18 @@ g_file_replace_contents_async (GFile *file,
data = g_new0 (ReplaceContentsData, 1);
- if (cancellable)
- data->cancellable = g_object_ref (cancellable);
- data->callback = callback;
- data->user_data = user_data;
data->content = contents;
data->length = length;
- data->pos = 0;
- data->file = g_object_ref (file);
+
+ data->task = g_task_new (file, cancellable, callback, user_data);
+ g_task_set_task_data (data->task, data, (GDestroyNotify)replace_contents_data_free);
g_file_replace_async (file,
etag,
make_backup,
flags,
0,
- cancellable,
+ g_task_get_cancellable (data->task),
replace_contents_open_callback,
data);
}
@@ -7180,27 +6944,18 @@ g_file_replace_contents_finish (GFile *file,
char **new_etag,
GError **error)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
ReplaceContentsData *data;
g_return_val_if_fail (G_IS_FILE (file), FALSE);
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (res), FALSE);
+ g_return_val_if_fail (g_task_is_valid (res, file), FALSE);
- simple = G_SIMPLE_ASYNC_RESULT (res);
+ task = G_TASK (res);
- if (g_simple_async_result_propagate_error (simple, error))
+ if (!g_task_propagate_boolean (task, error))
return FALSE;
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_file_replace_contents_async);
-
- data = g_simple_async_result_get_op_res_gpointer (simple);
-
- if (data->error)
- {
- g_propagate_error (error, data->error);
- data->error = NULL;
- return FALSE;
- }
+ data = g_task_get_task_data (task);
if (new_etag)
{
@@ -7250,12 +7005,10 @@ g_file_start_mountable (GFile *file,
if (iface->start_mountable == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_start_mountable,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -7295,6 +7048,8 @@ g_file_start_mountable_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_start_mountable))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
return (* iface->start_mountable_finish) (file, result, error);
@@ -7340,12 +7095,10 @@ g_file_stop_mountable (GFile *file,
if (iface->stop_mountable == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_stop_mountable,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -7385,6 +7138,8 @@ g_file_stop_mountable_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_stop_mountable))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
return (* iface->stop_mountable_finish) (file, result, error);
@@ -7424,12 +7179,10 @@ g_file_poll_mountable (GFile *file,
if (iface->poll_mountable == NULL)
{
- g_simple_async_report_error_in_idle (G_OBJECT (file),
- callback,
- user_data,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- _("Operation not supported"));
+ g_task_report_new_error (file, callback, user_data,
+ g_file_poll_mountable,
+ G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Operation not supported"));
return;
}
@@ -7467,6 +7220,8 @@ g_file_poll_mountable_finish (GFile *file,
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
+ else if (g_async_result_is_tagged (result, g_file_poll_mountable))
+ return g_task_propagate_boolean (G_TASK (result), error);
iface = G_FILE_GET_IFACE (file);
return (* iface->poll_mountable_finish) (file, result, error);