[gvfs/wip/oholy/gtask: 10/11] common: Port GVfsMountInfo to GTask
- From: Ondrej Holy <oholy src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gvfs/wip/oholy/gtask: 10/11] common: Port GVfsMountInfo to GTask
- Date: Thu, 23 Jun 2016 12:46:01 +0000 (UTC)
commit 3b98e7c5c40032cd7b89784b81edea56a1938474
Author: Ondrej Holy <oholy redhat com>
Date: Thu Jun 23 13:33:43 2016 +0200
common: Port GVfsMountInfo to GTask
GSimpleAsyncResult is deprecated in favour of GTask and should be replaced.
https://bugzilla.gnome.org/show_bug.cgi?id=747412
common/gvfsmountinfo.c | 291 +++++++++++++++--------------------------------
1 files changed, 93 insertions(+), 198 deletions(-)
---
diff --git a/common/gvfsmountinfo.c b/common/gvfsmountinfo.c
index 2c36551..9d48236 100644
--- a/common/gvfsmountinfo.c
+++ b/common/gvfsmountinfo.c
@@ -52,7 +52,7 @@ on_icon_file_located (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+ GTask *task = G_TASK (user_data);
GFile *icon_file;
GError *error;
@@ -62,16 +62,15 @@ on_icon_file_located (GObject *source_object,
&error);
if (icon_file != NULL)
{
- g_simple_async_result_set_op_res_gpointer (simple, g_file_icon_new (icon_file), NULL);
+ g_task_return_pointer (task, g_file_icon_new (icon_file), g_object_unref);
g_object_unref (icon_file);
}
else
{
- g_simple_async_result_set_from_error (simple, error);
- g_error_free (error);
+ g_task_return_error (task, error);
}
- g_simple_async_result_complete (simple);
- g_object_unref (simple);
+
+ g_object_unref (task);
}
static void
@@ -79,7 +78,7 @@ on_autorun_loaded (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+ GTask *task = G_TASK (user_data);
GFile *autorun_file;
gchar *content;
gchar *relative_icon_path;
@@ -161,9 +160,9 @@ on_autorun_loaded (GObject *source_object,
_g_find_file_insensitive_async (root,
relative_icon_path,
- NULL,
+ g_task_get_cancellable (task),
on_icon_file_located,
- simple);
+ task);
g_object_unref (root);
}
@@ -181,10 +180,8 @@ on_autorun_loaded (GObject *source_object,
if (error != NULL)
{
- g_simple_async_result_set_from_error (simple, error);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- g_error_free (error);
+ g_task_return_error (task, error);
+ g_object_unref (task);
}
g_free (relative_icon_path);
@@ -195,7 +192,7 @@ on_autorun_located (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+ GTask *task = G_TASK (user_data);
GFile *autorun_path;
GError *error;
@@ -205,17 +202,15 @@ on_autorun_located (GObject *source_object,
&error);
if (error != NULL)
{
- g_simple_async_result_set_from_error (simple, error);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- g_error_free (error);
+ g_task_return_error (task, error);
+ g_object_unref (task);
}
else
{
g_file_load_contents_async (autorun_path,
- g_object_get_data (G_OBJECT (simple), "cancellable"),
+ g_task_get_cancellable (task),
on_autorun_loaded,
- simple);
+ task);
g_object_unref (autorun_path);
}
}
@@ -226,21 +221,15 @@ g_vfs_mount_info_query_autorun_info (GFile *directory,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (directory),
- callback,
- user_data,
- g_vfs_mount_info_query_autorun_info);
+ GTask *task;
- if (cancellable != NULL)
- g_object_set_data_full (G_OBJECT (simple), "cancellable", g_object_ref (cancellable), g_object_unref);
+ task = g_task_new (directory, cancellable, callback, user_data);
_g_find_file_insensitive_async (directory,
"autorun.inf",
cancellable,
on_autorun_located,
- simple);
+ task);
}
GIcon *
@@ -248,20 +237,9 @@ g_vfs_mount_info_query_autorun_info_finish (GFile *directory,
GAsyncResult *res,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GIcon *ret;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_vfs_mount_info_query_autorun_info);
-
- ret = NULL;
-
- if (g_simple_async_result_propagate_error (simple, error))
- goto out;
-
- ret = g_simple_async_result_get_op_res_gpointer (simple);
+ g_return_val_if_fail (g_task_is_valid (res, directory), NULL);
- out:
- return ret;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -271,7 +249,7 @@ on_xdg_volume_info_loaded (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data);
+ GTask *task = G_TASK (user_data);
GFile *xdg_volume_info_file;
gchar *content;
gsize content_length;
@@ -351,11 +329,9 @@ on_xdg_volume_info_loaded (GObject *source_object,
g_themed_icon_append_name (G_THEMED_ICON (icon), "drive");
}
- g_simple_async_result_set_op_res_gpointer (simple, icon, NULL);
- g_object_set_data_full (G_OBJECT (simple), "name", name, g_free);
+ g_object_set_data_full (G_OBJECT (task), "name", name, g_free);
+ g_task_return_pointer (task, icon, g_object_unref);
name = NULL; /* steals name */
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
}
out:
@@ -364,12 +340,9 @@ on_xdg_volume_info_loaded (GObject *source_object,
g_key_file_free (key_file);
if (error != NULL)
- {
- g_simple_async_result_set_from_error (simple, error);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- g_error_free (error);
- }
+ g_task_return_error (task, error);
+
+ g_object_unref (task);
g_free (name);
g_free (icon_name);
@@ -383,19 +356,16 @@ g_vfs_mount_info_query_xdg_volume_info (GFile *directory,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple;
+ GTask *task;
GFile *file;
- simple = g_simple_async_result_new (G_OBJECT (directory),
- callback,
- user_data,
- g_vfs_mount_info_query_xdg_volume_info);
+ task = g_task_new (directory, cancellable, callback, user_data);
file = g_file_resolve_relative_path (directory, ".xdg-volume-info");
g_file_load_contents_async (file,
cancellable,
on_xdg_volume_info_loaded,
- simple);
+ task);
g_object_unref (file);
}
@@ -404,23 +374,16 @@ GIcon *g_vfs_mount_info_query_xdg_volume_info_finish (GFile *directory,
gchar **out_name,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GIcon *ret;
-
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_vfs_mount_info_query_xdg_volume_info);
-
- ret = NULL;
+ g_return_val_if_fail (g_task_is_valid (res, directory), NULL);
- if (g_simple_async_result_propagate_error (simple, error))
+ if (g_task_had_error (G_TASK (res)))
goto out;
- ret = g_simple_async_result_get_op_res_gpointer (simple);
-
if (out_name != NULL)
- *out_name = g_strdup (g_object_get_data (G_OBJECT (simple), "name"));
+ *out_name = g_strdup (g_object_get_data (G_OBJECT (res), "name"));
out:
- return ret;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -469,8 +432,9 @@ get_icon (const META_DL *meta)
}
static void
-bdmv_metadata_thread (GSimpleAsyncResult *result,
- GObject *object,
+bdmv_metadata_thread (GTask *task,
+ gpointer object,
+ gpointer task_data,
GCancellable *cancellable)
{
BLURAY *bd;
@@ -539,6 +503,9 @@ bdmv_metadata_thread (GSimpleAsyncResult *result,
icon = g_strdup (get_icon (meta));
}
+ if (name != NULL)
+ g_object_set_data_full (G_OBJECT (task), "name", name, g_free);
+
/* Set the results */
if (icon != NULL)
{
@@ -550,26 +517,21 @@ bdmv_metadata_thread (GSimpleAsyncResult *result,
icon_file = g_file_resolve_relative_path (file, icon_path);
g_free (icon_path);
- g_simple_async_result_set_op_res_gpointer (result,
- g_file_icon_new (icon_file),
- NULL);
+ g_task_return_pointer (task, g_file_icon_new (icon_file), g_object_unref);
}
else
{
- g_simple_async_result_set_op_res_gpointer (result, NULL, NULL);
+ g_task_return_pointer (task, NULL, NULL);
}
- if (name != NULL)
- g_object_set_data_full (G_OBJECT (result), "name", name, g_free);
-
+ g_object_unref (task);
bd_close (bd);
return;
error:
- g_simple_async_result_set_from_error (result, error);
- g_simple_async_result_set_op_res_gpointer (result, NULL, NULL);
- g_error_free (error);
+ g_task_return_error (task, error);
+ g_object_unref (task);
}
#endif /* HAVE_BLURAY */
@@ -579,30 +541,16 @@ g_vfs_mount_info_query_bdmv_volume_info (GFile *directory,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ GTask *task;
+
+ task = g_task_new (directory, cancellable, callback, user_data);
+
#ifdef HAVE_BLURAY
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (directory),
- callback,
- user_data,
- g_vfs_mount_info_query_bdmv_volume_info);
- g_simple_async_result_run_in_thread (simple,
- (GSimpleAsyncThreadFunc) bdmv_metadata_thread,
- G_PRIORITY_DEFAULT,
- cancellable);
- g_object_unref (simple);
+ g_task_run_in_thread (task, (GTaskThreadFunc) bdmv_metadata_thread);
#else
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (directory),
- callback,
- user_data,
- g_vfs_mount_info_query_bdmv_volume_info);
- g_simple_async_result_set_error (simple,
- G_IO_ERROR,
- G_IO_ERROR_NOT_SUPPORTED,
- "gvfs built without Expat support, no BDMV support");
- g_object_unref (simple);
+ g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ "gvfs built without Expat support, no BDMV support");
+ g_object_unref (task);
#endif /* HAVE_BLURAY */
}
@@ -611,23 +559,16 @@ GIcon *g_vfs_mount_info_query_bdmv_volume_info_finish (GFile *directory
gchar **out_name,
GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
- GIcon *ret;
+ g_return_val_if_fail (g_task_is_valid (res, directory), NULL);
- g_warn_if_fail (g_simple_async_result_get_source_tag (simple) == g_vfs_mount_info_query_bdmv_volume_info);
-
- ret = NULL;
-
- if (g_simple_async_result_propagate_error (simple, error))
+ if (g_task_had_error (G_TASK (res)))
goto out;
- ret = g_simple_async_result_get_op_res_gpointer (simple);
-
if (out_name != NULL)
- *out_name = g_strdup (g_object_get_data (G_OBJECT (simple), "name"));
+ *out_name = g_strdup (g_object_get_data (G_OBJECT (res), "name"));
out:
- return ret;
+ return g_task_propagate_pointer (G_TASK (res), error);
}
/* ---------------------------------------------------------------------------------------------------- */
@@ -649,39 +590,38 @@ find_file_insensitive_exists_callback (GObject *source_object,
typedef struct _InsensitiveFileSearchData
{
- GFile *root;
gchar *original_path;
gchar **split_path;
gint index;
GFileEnumerator *enumerator;
GFile *current_file;
-
- GCancellable *cancellable;
- GAsyncReadyCallback callback;
- gpointer user_data;
} InsensitiveFileSearchData;
static void
+clear_find_file_insensitive_state (InsensitiveFileSearchData *data);
+
+static void
_g_find_file_insensitive_async (GFile *parent,
const gchar *name,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data)
{
+ GTask *task;
InsensitiveFileSearchData *data;
GFile *direct_file = g_file_get_child (parent, name);
+ task = g_task_new (parent, cancellable, callback, user_data);
+
data = g_new0 (InsensitiveFileSearchData, 1);
- data->cancellable = cancellable;
- data->callback = callback;
- data->user_data = user_data;
- data->root = g_object_ref (parent);
data->original_path = g_strdup (name);
+ g_task_set_task_data (task, data, (GDestroyNotify)clear_find_file_insensitive_state);
+
g_file_query_info_async (direct_file, G_FILE_ATTRIBUTE_STANDARD_TYPE,
G_FILE_QUERY_INFO_NONE, G_PRIORITY_DEFAULT,
cancellable,
- find_file_insensitive_exists_callback, data);
+ find_file_insensitive_exists_callback, task);
}
@@ -689,8 +629,6 @@ _g_find_file_insensitive_async (GFile *parent,
static void
clear_find_file_insensitive_state (InsensitiveFileSearchData *data)
{
- if (data->root)
- g_object_unref (data->root);
g_free (data->original_path);
if (data->split_path)
g_strfreev (data->split_path);
@@ -706,32 +644,23 @@ find_file_insensitive_exists_callback (GObject *source_object,
GAsyncResult *res,
gpointer user_data)
{
+ GTask *task = G_TASK (user_data);
GFileInfo *info;
- InsensitiveFileSearchData *data = (InsensitiveFileSearchData *) (user_data);
+ InsensitiveFileSearchData *data = g_task_get_task_data (task);
/* The file exists and can be found with the given path, no need to search. */
if ((info = g_file_query_info_finish (G_FILE (source_object), res, NULL)))
{
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (source_object), g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
+ g_task_return_pointer (task, g_object_ref (source_object), g_object_unref);
+ g_object_unref (task);
g_object_unref (info);
}
-
else
{
data->split_path = g_strsplit (data->original_path, G_DIR_SEPARATOR_S, -1);
data->index = 0;
data->enumerator = NULL;
- data->current_file = g_object_ref (data->root);
+ data->current_file = g_object_ref (g_task_get_source_object (task));
/* Skip any empty components due to multiple slashes */
while (data->split_path[data->index] != NULL &&
@@ -741,39 +670,30 @@ find_file_insensitive_exists_callback (GObject *source_object,
g_file_enumerate_children_async (data->current_file,
G_FILE_ATTRIBUTE_STANDARD_NAME,
0, G_PRIORITY_DEFAULT,
- data->cancellable,
- enumerated_children_callback, data);
+ g_task_get_cancellable (task),
+ enumerated_children_callback, task);
}
-
- g_object_unref (source_object);
}
static void
enumerated_children_callback (GObject *source_object, GAsyncResult *res,
gpointer user_data)
{
+ GTask *task = G_TASK (user_data);
GFileEnumerator *enumerator;
- InsensitiveFileSearchData *data = (InsensitiveFileSearchData *) (user_data);
+ InsensitiveFileSearchData *data = g_task_get_task_data (task);
enumerator = g_file_enumerate_children_finish (G_FILE (source_object),
res, NULL);
if (enumerator == NULL)
{
- GSimpleAsyncResult *simple;
GFile *file;
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- file = g_file_get_child (data->root, data->original_path);
+ file = g_file_get_child (g_task_get_source_object (task), data->original_path);
- g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (file), g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
+ g_task_return_pointer (task, file, g_object_unref);
+ g_object_unref (task);
return;
}
@@ -781,16 +701,17 @@ enumerated_children_callback (GObject *source_object, GAsyncResult *res,
g_file_enumerator_next_files_async (enumerator,
INSENSITIVE_SEARCH_ITEMS_PER_CALLBACK,
G_PRIORITY_DEFAULT,
- data->cancellable,
+ g_task_get_cancellable (task),
more_files_callback,
- data);
+ task);
}
static void
more_files_callback (GObject *source_object, GAsyncResult *res,
gpointer user_data)
{
- InsensitiveFileSearchData *data = (InsensitiveFileSearchData *) (user_data);
+ GTask *task = G_TASK (user_data);
+ InsensitiveFileSearchData *data = g_task_get_task_data (task);
GList *files, *l;
gchar *filename = NULL, *component, *case_folded_name,
*name_collation_key;
@@ -855,7 +776,7 @@ more_files_callback (GObject *source_object, GAsyncResult *res,
g_file_enumerator_close_async (data->enumerator,
G_PRIORITY_DEFAULT,
- data->cancellable,
+ g_task_get_cancellable (task),
NULL, NULL);
g_object_unref (data->enumerator);
data->enumerator = NULL;
@@ -875,17 +796,8 @@ more_files_callback (GObject *source_object, GAsyncResult *res,
if (data->split_path[data->index] == NULL)
{
/* Search is complete, file was found */
- GSimpleAsyncResult *simple;
-
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- g_simple_async_result_set_op_res_gpointer (simple, g_object_ref (data->current_file),
g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
+ g_task_return_pointer (task, g_object_ref (data->current_file), g_object_unref);
+ g_object_unref (task);
return;
}
@@ -893,31 +805,23 @@ more_files_callback (GObject *source_object, GAsyncResult *res,
g_file_enumerate_children_async (data->current_file,
G_FILE_ATTRIBUTE_STANDARD_NAME,
0, G_PRIORITY_DEFAULT,
- data->cancellable,
+ g_task_get_cancellable (task),
enumerated_children_callback,
- data);
+ task);
return;
}
if (end_of_files)
{
/* Could not find the given file, abort the search */
- GSimpleAsyncResult *simple;
GFile *file;
g_object_unref (data->enumerator);
data->enumerator = NULL;
- simple = g_simple_async_result_new (G_OBJECT (data->root),
- data->callback,
- data->user_data,
- _g_find_file_insensitive_async);
-
- file = g_file_get_child (data->root, data->original_path);
- g_simple_async_result_set_op_res_gpointer (simple, file, g_object_unref);
- g_simple_async_result_complete_in_idle (simple);
- g_object_unref (simple);
- clear_find_file_insensitive_state (data);
+ file = g_file_get_child (g_task_get_source_object (task), data->original_path);
+ g_task_return_pointer (task, file, g_object_unref);
+ g_object_unref (task);
return;
}
@@ -925,9 +829,9 @@ more_files_callback (GObject *source_object, GAsyncResult *res,
g_file_enumerator_next_files_async (data->enumerator,
INSENSITIVE_SEARCH_ITEMS_PER_CALLBACK,
G_PRIORITY_DEFAULT,
- data->cancellable,
+ g_task_get_cancellable (task),
more_files_callback,
- data);
+ task);
}
static GFile *
@@ -935,16 +839,7 @@ _g_find_file_insensitive_finish (GFile *parent,
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
- GFile *file;
-
- g_return_val_if_fail (G_IS_SIMPLE_ASYNC_RESULT (result), NULL);
-
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, error))
- return NULL;
+ g_return_val_if_fail (g_task_is_valid (result, parent), NULL);
- file = G_FILE (g_simple_async_result_get_op_res_gpointer (simple));
- return g_object_ref (file);
+ return g_task_propagate_pointer (G_TASK (result), error);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]