summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeesoo Ahn <yisooan@fedoraproject.org>2020-06-07 17:34:29 +0900
committerLeesoo Ahn <yisooan@fedoraproject.org>2020-07-19 16:52:29 +0900
commitb875a51514995580275cad23f7e80c4ad9c6491c (patch)
tree9f9d21f01c1d2624201437c30f4bbbbd0d6783dd
parent27fc3f3ca59503b1e7da99d15b74d85d54842e79 (diff)
downloadlibgfbgraph-b875a51514995580275cad23f7e80c4ad9c6491c.tar.gz
user: use GTask instead of deprecated APIs on getting me
me is such a convenience way to get users' information. However, replace all the deprecated APIs with GTask for the job.
-rw-r--r--gfbgraph/gfbgraph-user.c78
1 files changed, 25 insertions, 53 deletions
diff --git a/gfbgraph/gfbgraph-user.c b/gfbgraph/gfbgraph-user.c
index 4a85f65..0c27cb0 100644
--- a/gfbgraph/gfbgraph-user.c
+++ b/gfbgraph/gfbgraph-user.c
@@ -28,6 +28,7 @@
* With the "me" functions, (see gfbgraph_user_get_me()) you can query for the logged user node.
**/
+#include <gmodule.h>
#include <json-glib/json-glib.h>
#include "gfbgraph-user.h"
@@ -48,10 +49,6 @@ struct _GFBGraphUserPrivate {
};
typedef struct {
- GFBGraphUser *user;
-} GFBGraphUserAsyncData;
-
-typedef struct {
GFBGraphAuthorizer *authorizer;
GList *nodes;
} GFBGraphUserConnectionAsyncData;
@@ -167,14 +164,6 @@ gfbgraph_user_class_init (GFBGraphUserClass *klass)
/* --- Private Functions --- */
static void
-async_data_free (GFBGraphUserAsyncData *data)
-{
- g_object_unref (data->user);
-
- g_slice_free (GFBGraphUserAsyncData, data);
-}
-
-static void
connection_async_data_free (GFBGraphUserConnectionAsyncData *data)
{
g_object_unref (data->authorizer);
@@ -183,17 +172,24 @@ connection_async_data_free (GFBGraphUserConnectionAsyncData *data)
}
static void
-get_me_async_thread (GSimpleAsyncResult *simple_async,
- GFBGraphAuthorizer *authorizer,
- GCancellable cancellable)
+get_me_async_io_thread (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- GFBGraphUserAsyncData *data;
+ GFBGraphAuthorizer *authorizer = GFBGRAPH_AUTHORIZER (source_object);
+ GFBGraphUser *user = NULL;
GError *error = NULL;
- data = (GFBGraphUserAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async);
- data->user = gfbgraph_user_get_me (authorizer, &error);
- if (error != NULL)
- g_simple_async_result_take_error (simple_async, error);
+ user = gfbgraph_user_get_me (authorizer, &error);
+ if (user && !error)
+ g_task_return_pointer (task, user, g_object_unref);
+ else
+ {
+ /* FIXME: better way to handle error */
+ if (error)
+ g_task_return_error (task, error);
+ }
}
static void
@@ -308,31 +304,19 @@ gfbgraph_user_get_me_async (GFBGraphAuthorizer *authorizer,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *simple_async;
- GFBGraphUserAsyncData *data;
+ GTask *task;
g_return_if_fail (GFBGRAPH_IS_AUTHORIZER (authorizer));
g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
g_return_if_fail (callback != NULL);
- simple_async = g_simple_async_result_new (G_OBJECT (authorizer),
- callback,
- user_data,
- gfbgraph_user_get_me_async);
- g_simple_async_result_set_check_cancellable (simple_async, cancellable);
-
- data = g_slice_new (GFBGraphUserAsyncData);
- data->user = NULL;
+ task = g_task_new (authorizer,
+ cancellable,
+ callback,
+ user_data);
+ g_task_run_in_thread (task, get_me_async_io_thread);
- g_simple_async_result_set_op_res_gpointer (simple_async,
- data,
- (GDestroyNotify)async_data_free);
- g_simple_async_result_run_in_thread (simple_async,
- (GSimpleAsyncThreadFunc)get_me_async_thread,
- G_PRIORITY_DEFAULT,
- cancellable);
-
- g_object_unref (simple_async);
+ g_object_unref (task);
}
/**
@@ -351,22 +335,10 @@ gfbgraph_user_get_me_async_finish (GFBGraphAuthorizer *authorizer,
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple_async;
- GFBGraphUserAsyncData *data;
-
- g_return_val_if_fail (g_simple_async_result_is_valid (result,
- G_OBJECT (authorizer),
- gfbgraph_user_get_me_async),
- NULL);
+ g_return_val_if_fail (g_task_is_valid (result, authorizer), NULL);
g_return_val_if_fail (error == NULL || *error == NULL, NULL);
- simple_async = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple_async, error))
- return NULL;
-
- data = (GFBGraphUserAsyncData *) g_simple_async_result_get_op_res_gpointer (simple_async);
- return data->user;
+ return g_task_propagate_pointer (G_TASK (result), error);
}
/**