[libgdata] gdata: Port various core APIs to GTask from GSimpleAsyncResult



commit cbf5a496e29e6aae93d368fa0cdd63426cced614
Author: Philip Withnall <withnall endlessm com>
Date:   Tue Aug 8 21:10:01 2017 +0100

    gdata: Port various core APIs to GTask from GSimpleAsyncResult
    
    GSimpleAsyncResult has been deprecated for quite a long time, and we’re
    way overdue on porting to GTask. Start doing that for some of the core
    classes. Still a number of instances of it left, though.
    
    Signed-off-by: Philip Withnall <withnall endlessm com>

 gdata/gdata-access-handler.c          |   35 +++---
 gdata/gdata-authorizer.c              |   48 ++++----
 gdata/gdata-batch-operation.c         |   44 +++----
 gdata/gdata-client-login-authorizer.c |   43 +++----
 gdata/gdata-service.c                 |  234 +++++++++++++--------------------
 5 files changed, 163 insertions(+), 241 deletions(-)
---
diff --git a/gdata/gdata-access-handler.c b/gdata/gdata-access-handler.c
index eb09e63..0f228f2 100644
--- a/gdata/gdata-access-handler.c
+++ b/gdata/gdata-access-handler.c
@@ -69,7 +69,6 @@ typedef struct {
        GDataQueryProgressCallback progress_callback;
        gpointer progress_user_data;
        GDestroyNotify destroy_progress_user_data;
-       GDataFeed *feed;
 } GetRulesAsyncData;
 
 static void
@@ -77,8 +76,6 @@ get_rules_async_data_free (GetRulesAsyncData *self)
 {
        if (self->service != NULL)
                g_object_unref (self->service);
-       if (self->feed != NULL)
-               g_object_unref (self->feed);
 
        g_slice_free (GetRulesAsyncData, self);
 }
@@ -136,24 +133,26 @@ gdata_access_handler_real_get_rules (GDataAccessHandler *self,
 }
 
 static void
-get_rules_thread (GSimpleAsyncResult *result, GDataAccessHandler *access_handler, GCancellable *cancellable)
+get_rules_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
+       GDataAccessHandler *access_handler = GDATA_ACCESS_HANDLER (source_object);
        GDataAccessHandlerIface *iface;
-       GError *error = NULL;
-       GetRulesAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
+       g_autoptr(GError) error = NULL;
+       g_autoptr(GDataFeed) feed = NULL;
+       GetRulesAsyncData *data = task_data;
 
        /* Execute the query and return */
        iface = GDATA_ACCESS_HANDLER_GET_IFACE (access_handler);
        g_assert (iface->get_rules != NULL);
 
-       data->feed = iface->get_rules (access_handler, data->service,
-                                      cancellable, data->progress_callback,
-                                      data->progress_user_data, &error);
+       feed = iface->get_rules (access_handler, data->service,
+                                cancellable, data->progress_callback,
+                                data->progress_user_data, &error);
 
-       if (data->feed == NULL && error != NULL) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-       }
+       if (feed == NULL && error != NULL)
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_pointer (task, g_steal_pointer (&feed), g_object_unref);
 
        if (data->destroy_progress_user_data != NULL) {
                data->destroy_progress_user_data (data->progress_user_data);
@@ -189,7 +188,7 @@ gdata_access_handler_get_rules_async (GDataAccessHandler *self, GDataService *se
                                       GDestroyNotify destroy_progress_user_data,
                                       GAsyncReadyCallback callback, gpointer user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        GetRulesAsyncData *data;
 
        g_return_if_fail (GDATA_IS_ACCESS_HANDLER (self));
@@ -203,10 +202,10 @@ gdata_access_handler_get_rules_async (GDataAccessHandler *self, GDataService *se
        data->progress_user_data = progress_user_data;
        data->destroy_progress_user_data = destroy_progress_user_data;
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, gdata_service_query_async);
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) get_rules_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) get_rules_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_service_query_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) get_rules_async_data_free);
+       g_task_run_in_thread (task, get_rules_thread);
 }
 
 /**
diff --git a/gdata/gdata-authorizer.c b/gdata/gdata-authorizer.c
index 5fa00a0..933e425 100644
--- a/gdata/gdata-authorizer.c
+++ b/gdata/gdata-authorizer.c
@@ -196,17 +196,18 @@ gdata_authorizer_refresh_authorization (GDataAuthorizer *self, GCancellable *can
 }
 
 static void
-refresh_authorization_thread (GSimpleAsyncResult *result, GDataAuthorizer *authorizer, GCancellable 
*cancellable)
+refresh_authorization_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable 
*cancellable)
 {
-       GError *error = NULL;
+       GDataAuthorizer *authorizer = GDATA_AUTHORIZER (source_object);
+       g_autoptr(GError) error = NULL;
 
        /* Refresh the authorisation and return */
        gdata_authorizer_refresh_authorization (authorizer, cancellable, &error);
 
-       if (error != NULL) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-       }
+       if (error != NULL)
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_boolean (task, TRUE);
 }
 
 /**
@@ -247,20 +248,20 @@ gdata_authorizer_refresh_authorization_async (GDataAuthorizer *self, GCancellabl
        if (iface->refresh_authorization_async != NULL) {
                /* Call the method */
                iface->refresh_authorization_async (self, cancellable, callback, user_data);
-       } else if (iface->refresh_authorization != NULL) {
-               /* If the _async() method isn't implemented, fall back to running the sync method in a thread 
*/
-               GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
-                                                                       
gdata_authorizer_refresh_authorization_async);
-               g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) 
refresh_authorization_thread, G_PRIORITY_DEFAULT, cancellable);
-               g_object_unref (result);
-
-               return;
        } else {
-               /* If neither are implemented, immediately return FALSE with no error in a callback */
-               GSimpleAsyncResult *result = g_simple_async_result_new (G_OBJECT (self), callback, user_data,
-                                                                       
gdata_authorizer_refresh_authorization_async);
-               g_simple_async_result_complete_in_idle (result);
-               g_object_unref (result);
+               g_autoptr(GTask) task = NULL;
+
+               task = g_task_new (self, cancellable, callback, user_data);
+               g_task_set_source_tag (task, gdata_authorizer_refresh_authorization_async);
+
+
+               if (iface->refresh_authorization != NULL) {
+                       /* If the _async() method isn't implemented, fall back to running the sync method in 
a thread */
+                       g_task_run_in_thread (task, refresh_authorization_thread);
+               } else {
+                       /* If neither are implemented, immediately return FALSE with no error in a callback */
+                       g_task_return_boolean (task, FALSE);
+               }
 
                return;
        }
@@ -300,13 +301,10 @@ gdata_authorizer_refresh_authorization_finish (GDataAuthorizer *self, GAsyncResu
                return iface->refresh_authorization_finish (self, async_result, error);
        } else if (iface->refresh_authorization != NULL) {
                /* If the _async() method isn't implemented, fall back to finishing off running the sync 
method in a thread */
-               g_warn_if_fail (g_simple_async_result_is_valid (async_result, G_OBJECT (self), 
gdata_authorizer_refresh_authorization_async) == TRUE);
-
-               if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (async_result), error) == 
TRUE) {
-                       return FALSE;
-               }
+               g_return_val_if_fail (g_task_is_valid (async_result, self), FALSE);
+               g_return_val_if_fail (g_async_result_is_tagged (async_result, 
gdata_authorizer_refresh_authorization_async), FALSE);
 
-               return TRUE;
+               return g_task_propagate_boolean (G_TASK (async_result), error);
        }
 
        /* Fall back to just returning FALSE if none of the methods are implemented */
diff --git a/gdata/gdata-batch-operation.c b/gdata/gdata-batch-operation.c
index 6e78c61..adac8b5 100644
--- a/gdata/gdata-batch-operation.c
+++ b/gdata/gdata-batch-operation.c
@@ -724,20 +724,16 @@ error:
 }
 
 static void
-run_thread (GSimpleAsyncResult *result, GDataBatchOperation *operation, GCancellable *cancellable)
+run_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
-       gboolean success;
-       GError *error = NULL;
+       GDataBatchOperation *operation = GDATA_BATCH_OPERATION (source_object);
+       g_autoptr(GError) error = NULL;
 
        /* Run the batch operation and return */
-       success = gdata_batch_operation_run (operation, cancellable, &error);
-       g_simple_async_result_set_op_res_gboolean (result, success);
-
-       /* Propagate any errors */
-       if (success == FALSE) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-       }
+       if (!gdata_batch_operation_run (operation, cancellable, &error))
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_boolean (task, TRUE);
 }
 
 /**
@@ -761,7 +757,7 @@ run_thread (GSimpleAsyncResult *result, GDataBatchOperation *operation, GCancell
 void
 gdata_batch_operation_run_async (GDataBatchOperation *self, GCancellable *cancellable, GAsyncReadyCallback 
callback, gpointer user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
 
        g_return_if_fail (GDATA_IS_BATCH_OPERATION (self));
        g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
@@ -770,14 +766,9 @@ gdata_batch_operation_run_async (GDataBatchOperation *self, GCancellable *cancel
        /* Mark the operation as async for the purposes of deciding where to call the callbacks */
        self->priv->is_async = TRUE;
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, 
gdata_batch_operation_run_async);
-
-       /* Disable handling of cancellation so that g_simple_async_result_run_in_thread() doesn't return 
immediately without calling run_thread() if
-        * cancellable has already been cancelled by this point. */
-       g_simple_async_result_set_handle_cancellation (result, FALSE);
-
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) run_thread, G_PRIORITY_DEFAULT, 
cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_batch_operation_run_async);
+       g_task_run_in_thread (task, run_thread);
 }
 
 /**
@@ -798,16 +789,15 @@ gboolean
 gdata_batch_operation_run_finish (GDataBatchOperation *self, GAsyncResult *async_result, GError **error)
 {
        GDataBatchOperationPrivate *priv = self->priv;
-       GError *child_error = NULL;
-       GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
+       g_autoptr(GError) child_error = NULL;
 
        g_return_val_if_fail (GDATA_IS_BATCH_OPERATION (self), FALSE);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), FALSE);
        g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), FALSE);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, gdata_batch_operation_run_async), 
FALSE);
 
-       g_warn_if_fail (g_simple_async_result_get_source_tag (result) == gdata_batch_operation_run_async);
-
-       if (g_simple_async_result_propagate_error (result, &child_error) == TRUE) {
+       if (!g_task_propagate_boolean (G_TASK (async_result), &child_error)) {
                if (priv->has_run == FALSE) {
                        GHashTableIter iter;
                        gpointer op_id;
@@ -826,10 +816,10 @@ gdata_batch_operation_run_finish (GDataBatchOperation *self, GAsyncResult *async
                        priv->is_async = TRUE;
                }
 
-               g_propagate_error (error, child_error);
+               g_propagate_error (error, g_steal_pointer (&child_error));
 
                return FALSE;
        }
 
-       return g_simple_async_result_get_op_res_gboolean (result);
+       return TRUE;
 }
diff --git a/gdata/gdata-client-login-authorizer.c b/gdata/gdata-client-login-authorizer.c
index 0586115..9edb789 100644
--- a/gdata/gdata-client-login-authorizer.c
+++ b/gdata/gdata-client-login-authorizer.c
@@ -981,20 +981,16 @@ authenticate_async_data_free (AuthenticateAsyncData *self)
 }
 
 static void
-authenticate_thread (GSimpleAsyncResult *result, GDataClientLoginAuthorizer *authorizer, GCancellable 
*cancellable)
+authenticate_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
-       GError *error = NULL;
-       gboolean success;
-       AuthenticateAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
-
-       success = authenticate_loop (authorizer, TRUE, data->username, data->password, cancellable, &error);
-
-       g_simple_async_result_set_op_res_gboolean (result, success);
-
-       if (success == FALSE) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-       }
+       GDataClientLoginAuthorizer *authorizer = GDATA_CLIENT_LOGIN_AUTHORIZER (source_object);
+       g_autoptr(GError) error = NULL;
+       AuthenticateAsyncData *data = task_data;
+
+       if (!authenticate_loop (authorizer, TRUE, data->username, data->password, cancellable, &error))
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_boolean (task, TRUE);
 }
 
 /**
@@ -1020,7 +1016,7 @@ void
 gdata_client_login_authorizer_authenticate_async (GDataClientLoginAuthorizer *self, const gchar *username, 
const gchar *password,
                                                   GCancellable *cancellable, GAsyncReadyCallback callback, 
gpointer user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        AuthenticateAsyncData *data;
 
        g_return_if_fail (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (self));
@@ -1032,11 +1028,10 @@ gdata_client_login_authorizer_authenticate_async (GDataClientLoginAuthorizer *se
        data->username = g_strdup (username);
        data->password = _gdata_service_secure_strdup (password);
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, 
gdata_client_login_authorizer_authenticate_async);
-       g_simple_async_result_set_handle_cancellation (result, FALSE); /* we handle our own cancellation so 
we can set ::username and ::password */
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) 
authenticate_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) authenticate_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_client_login_authorizer_authenticate_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) authenticate_async_data_free);
+       g_task_run_in_thread (task, authenticate_thread);
 }
 
 /**
@@ -1057,14 +1052,10 @@ gdata_client_login_authorizer_authenticate_finish (GDataClientLoginAuthorizer *s
        g_return_val_if_fail (GDATA_IS_CLIENT_LOGIN_AUTHORIZER (self), FALSE);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), FALSE);
        g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), FALSE);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, 
gdata_client_login_authorizer_authenticate_async), FALSE);
 
-       g_warn_if_fail (g_simple_async_result_is_valid (async_result, G_OBJECT (self), 
gdata_client_login_authorizer_authenticate_async));
-
-       if (g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (async_result), error) == TRUE) {
-               return FALSE;
-       }
-
-       return TRUE;
+       return g_task_propagate_boolean (G_TASK (async_result), error);
 }
 
 /**
diff --git a/gdata/gdata-service.c b/gdata/gdata-service.c
index dfc4623..527805d 100644
--- a/gdata/gdata-service.c
+++ b/gdata/gdata-service.c
@@ -787,7 +787,6 @@ typedef struct {
        GType entry_type;
 
        /* Output */
-       GDataFeed *feed;
        GDataQueryProgressCallback progress_callback;
        gpointer progress_user_data;
        GDestroyNotify destroy_progress_user_data;
@@ -802,25 +801,25 @@ query_async_data_free (QueryAsyncData *self)
        g_free (self->feed_uri);
        if (self->query)
                g_object_unref (self->query);
-       if (self->feed)
-               g_object_unref (self->feed);
 
        g_slice_free (QueryAsyncData, self);
 }
 
 static void
-query_thread (GSimpleAsyncResult *result, GDataService *service, GCancellable *cancellable)
+query_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
-       GError *error = NULL;
-       QueryAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
+       GDataService *service = GDATA_SERVICE (source_object);
+       g_autoptr(GError) error = NULL;
+       QueryAsyncData *data = task_data;
+       g_autoptr(GDataFeed) feed = NULL;
 
        /* Execute the query and return */
-       data->feed = __gdata_service_query (service, data->domain, data->feed_uri, data->query, 
data->entry_type, cancellable,
-                                           data->progress_callback, data->progress_user_data, &error);
-       if (data->feed == NULL && error != NULL) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-       }
+       feed = __gdata_service_query (service, data->domain, data->feed_uri, data->query, data->entry_type, 
cancellable,
+                                     data->progress_callback, data->progress_user_data, &error);
+       if (feed == NULL && error != NULL)
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_pointer (task, g_steal_pointer (&feed), g_object_unref);
 
        if (data->destroy_progress_user_data != NULL) {
                data->destroy_progress_user_data (data->progress_user_data);
@@ -857,7 +856,7 @@ gdata_service_query_async (GDataService *self, GDataAuthorizationDomain *domain,
                            GCancellable *cancellable, GDataQueryProgressCallback progress_callback, gpointer 
progress_user_data,
                            GDestroyNotify destroy_progress_user_data, GAsyncReadyCallback callback, gpointer 
user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        QueryAsyncData *data;
 
        g_return_if_fail (GDATA_IS_SERVICE (self));
@@ -872,15 +871,14 @@ gdata_service_query_async (GDataService *self, GDataAuthorizationDomain *domain,
        data->feed_uri = g_strdup (feed_uri);
        data->query = (query != NULL) ? g_object_ref (query) : NULL;
        data->entry_type = entry_type;
-       data->feed = NULL;
        data->progress_callback = progress_callback;
        data->progress_user_data = progress_user_data;
        data->destroy_progress_user_data = destroy_progress_user_data;
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, gdata_service_query_async);
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) query_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) query_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_service_query_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) query_async_data_free);
+       g_task_run_in_thread (task, query_thread);
 }
 
 /**
@@ -896,22 +894,13 @@ gdata_service_query_async (GDataService *self, GDataAuthorizationDomain *domain,
 GDataFeed *
 gdata_service_query_finish (GDataService *self, GAsyncResult *async_result, GError **error)
 {
-       GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
-       QueryAsyncData *data;
-
        g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), NULL);
-       g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-       g_warn_if_fail (g_simple_async_result_get_source_tag (result) == gdata_service_query_async);
-
-       if (g_simple_async_result_propagate_error (result, error) == TRUE)
-               return NULL;
+       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), NULL);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, gdata_service_query_async), NULL);
 
-       data = g_simple_async_result_get_op_res_gpointer (result);
-       if (data->feed != NULL)
-               return g_object_ref (data->feed);
-       return NULL;
+       return g_task_propagate_pointer (G_TASK (async_result), error);
 }
 
 /* Does the bulk of the work of gdata_service_query. Split out because certain queries (such as that done by
@@ -1199,21 +1188,19 @@ query_single_entry_async_data_free (QuerySingleEntryAsyncData *data)
 }
 
 static void
-query_single_entry_thread (GSimpleAsyncResult *result, GDataService *service, GCancellable *cancellable)
+query_single_entry_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable 
*cancellable)
 {
-       GDataEntry *entry;
-       GError *error = NULL;
-       QuerySingleEntryAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
+       GDataService *service = GDATA_SERVICE (source_object);
+       g_autoptr(GDataEntry) entry = NULL;
+       g_autoptr(GError) error = NULL;
+       QuerySingleEntryAsyncData *data = task_data;
 
        /* Execute the query and return */
        entry = gdata_service_query_single_entry (service, data->domain, data->entry_id, data->query, 
data->entry_type, cancellable, &error);
-       if (entry == NULL && error != NULL) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-               return;
-       }
-
-       g_simple_async_result_set_op_res_gpointer (result, entry, (GDestroyNotify) g_object_unref);
+       if (entry == NULL && error != NULL)
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_pointer (task, g_steal_pointer (&entry), g_object_unref);
 }
 
 /**
@@ -1242,7 +1229,7 @@ void
 gdata_service_query_single_entry_async (GDataService *self, GDataAuthorizationDomain *domain, const gchar 
*entry_id, GDataQuery *query,
                                         GType entry_type, GCancellable *cancellable, GAsyncReadyCallback 
callback, gpointer user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        QuerySingleEntryAsyncData *data;
 
        g_return_if_fail (GDATA_IS_SERVICE (self));
@@ -1259,10 +1246,10 @@ gdata_service_query_single_entry_async (GDataService *self, GDataAuthorizationDo
        data->entry_id = g_strdup (entry_id);
        data->entry_type = entry_type;
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, 
gdata_service_query_single_entry_async);
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) 
query_single_entry_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) query_single_entry_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_service_query_single_entry_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) 
query_single_entry_async_data_free);
+       g_task_run_in_thread (task, query_single_entry_thread);
 }
 
 /**
@@ -1280,22 +1267,13 @@ gdata_service_query_single_entry_async (GDataService *self, GDataAuthorizationDo
 GDataEntry *
 gdata_service_query_single_entry_finish (GDataService *self, GAsyncResult *async_result, GError **error)
 {
-       GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
-       GDataEntry *entry;
-
        g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), NULL);
        g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), NULL);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, 
gdata_service_query_single_entry_async), NULL);
 
-       g_warn_if_fail (g_simple_async_result_get_source_tag (result) == 
gdata_service_query_single_entry_async);
-
-       if (g_simple_async_result_propagate_error (result, error) == TRUE)
-               return NULL;
-
-       entry = g_simple_async_result_get_op_res_gpointer (result);
-       if (entry != NULL)
-               return g_object_ref (entry);
-       return NULL;
+       return g_task_propagate_pointer (G_TASK (async_result), error);
 }
 
 typedef struct {
@@ -1318,22 +1296,19 @@ insert_entry_async_data_free (InsertEntryAsyncData *self)
 }
 
 static void
-insert_entry_thread (GSimpleAsyncResult *result, GDataService *service, GCancellable *cancellable)
+insert_entry_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
-       GDataEntry *updated_entry;
-       GError *error = NULL;
-       InsertEntryAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
+       GDataService *service = GDATA_SERVICE (source_object);
+       g_autoptr(GDataEntry) updated_entry = NULL;
+       g_autoptr(GError) error = NULL;
+       InsertEntryAsyncData *data = task_data;
 
        /* Insert the entry and return */
        updated_entry = gdata_service_insert_entry (service, data->domain, data->upload_uri, data->entry, 
cancellable, &error);
-       if (updated_entry == NULL) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-               return;
-       }
-
-       /* Swap the old entry with the new one */
-       g_simple_async_result_set_op_res_gpointer (result, updated_entry, (GDestroyNotify) g_object_unref);
+       if (updated_entry == NULL)
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_pointer (task, g_steal_pointer (&updated_entry), g_object_unref);
 }
 
 /**
@@ -1360,7 +1335,7 @@ void
 gdata_service_insert_entry_async (GDataService *self, GDataAuthorizationDomain *domain, const gchar 
*upload_uri, GDataEntry *entry,
                                   GCancellable *cancellable, GAsyncReadyCallback callback, gpointer 
user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        InsertEntryAsyncData *data;
 
        g_return_if_fail (GDATA_IS_SERVICE (self));
@@ -1374,10 +1349,10 @@ gdata_service_insert_entry_async (GDataService *self, GDataAuthorizationDomain *
        data->upload_uri = g_strdup (upload_uri);
        data->entry = g_object_ref (entry);
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, 
gdata_service_insert_entry_async);
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) 
insert_entry_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) insert_entry_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_service_insert_entry_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) insert_entry_async_data_free);
+       g_task_run_in_thread (task, insert_entry_thread);
 }
 
 /**
@@ -1395,22 +1370,13 @@ gdata_service_insert_entry_async (GDataService *self, GDataAuthorizationDomain *
 GDataEntry *
 gdata_service_insert_entry_finish (GDataService *self, GAsyncResult *async_result, GError **error)
 {
-       GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
-       GDataEntry *entry;
-
        g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), NULL);
-       g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-       g_warn_if_fail (g_simple_async_result_get_source_tag (result) == gdata_service_insert_entry_async);
-
-       if (g_simple_async_result_propagate_error (result, error) == TRUE)
-               return NULL;
-
-       entry = g_simple_async_result_get_op_res_gpointer (result);
-       g_assert (entry != NULL);
+       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), NULL);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, gdata_service_insert_entry_async), 
NULL);
 
-       return g_object_ref (entry);
+       return g_task_propagate_pointer (G_TASK (async_result), error);
 }
 
 /**
@@ -1529,22 +1495,19 @@ update_entry_async_data_free (UpdateEntryAsyncData *data)
 }
 
 static void
-update_entry_thread (GSimpleAsyncResult *result, GDataService *service, GCancellable *cancellable)
+update_entry_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
-       GDataEntry *updated_entry;
-       GError *error = NULL;
-       UpdateEntryAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
+       GDataService *service = GDATA_SERVICE (source_object);
+       g_autoptr(GDataEntry) updated_entry = NULL;
+       g_autoptr(GError) error = NULL;
+       UpdateEntryAsyncData *data = task_data;
 
        /* Update the entry and return */
        updated_entry = gdata_service_update_entry (service, data->domain, data->entry, cancellable, &error);
-       if (updated_entry == NULL) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-               return;
-       }
-
-       /* Swap the old entry with the new one */
-       g_simple_async_result_set_op_res_gpointer (result, updated_entry, (GDestroyNotify) g_object_unref);
+       if (updated_entry == NULL)
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_pointer (task, g_steal_pointer (&updated_entry), g_object_unref);
 }
 
 /**
@@ -1570,7 +1533,7 @@ void
 gdata_service_update_entry_async (GDataService *self, GDataAuthorizationDomain *domain, GDataEntry *entry,
                                   GCancellable *cancellable, GAsyncReadyCallback callback, gpointer 
user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        UpdateEntryAsyncData *data;
 
        g_return_if_fail (GDATA_IS_SERVICE (self));
@@ -1582,10 +1545,10 @@ gdata_service_update_entry_async (GDataService *self, GDataAuthorizationDomain *
        data->domain = (domain != NULL) ? g_object_ref (domain) : NULL;
        data->entry = g_object_ref (entry);
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, 
gdata_service_update_entry_async);
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) 
update_entry_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) update_entry_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (task, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_service_update_entry_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) update_entry_async_data_free);
+       g_task_run_in_thread (task, update_entry_thread);
 }
 
 /**
@@ -1603,22 +1566,13 @@ gdata_service_update_entry_async (GDataService *self, GDataAuthorizationDomain *
 GDataEntry *
 gdata_service_update_entry_finish (GDataService *self, GAsyncResult *async_result, GError **error)
 {
-       GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
-       GDataEntry *entry;
-
        g_return_val_if_fail (GDATA_IS_SERVICE (self), NULL);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), NULL);
-       g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-       g_warn_if_fail (g_simple_async_result_get_source_tag (result) == gdata_service_update_entry_async);
-
-       if (g_simple_async_result_propagate_error (result, error) == TRUE)
-               return NULL;
-
-       entry = g_simple_async_result_get_op_res_gpointer (result);
-       g_assert (entry != NULL);
+       g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), NULL);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, gdata_service_update_entry_async), 
NULL);
 
-       return g_object_ref (entry);
+       return g_task_propagate_pointer (G_TASK (async_result), error);
 }
 
 /**
@@ -1731,22 +1685,17 @@ delete_entry_async_data_free (DeleteEntryAsyncData *data)
 }
 
 static void
-delete_entry_thread (GSimpleAsyncResult *result, GDataService *service, GCancellable *cancellable)
+delete_entry_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
 {
-       gboolean success;
-       GError *error = NULL;
-       DeleteEntryAsyncData *data = g_simple_async_result_get_op_res_gpointer (result);
+       GDataService *service = GDATA_SERVICE (source_object);
+       g_autoptr(GError) error = NULL;
+       DeleteEntryAsyncData *data = task_data;
 
        /* Delete the entry and return */
-       success = gdata_service_delete_entry (service, data->domain, data->entry, cancellable, &error);
-       if (success == FALSE) {
-               g_simple_async_result_set_from_error (result, error);
-               g_error_free (error);
-               return;
-       }
-
-       /* Replace the entry with the success value */
-       g_simple_async_result_set_op_res_gboolean (result, success);
+       if (!gdata_service_delete_entry (service, data->domain, data->entry, cancellable, &error))
+               g_task_return_error (task, g_steal_pointer (&error));
+       else
+               g_task_return_boolean (task, TRUE);
 }
 
 /**
@@ -1772,7 +1721,7 @@ void
 gdata_service_delete_entry_async (GDataService *self, GDataAuthorizationDomain *domain, GDataEntry *entry,
                                   GCancellable *cancellable, GAsyncReadyCallback callback, gpointer 
user_data)
 {
-       GSimpleAsyncResult *result;
+       g_autoptr(GTask) task = NULL;
        DeleteEntryAsyncData *data;
 
        g_return_if_fail (GDATA_IS_SERVICE (self));
@@ -1784,10 +1733,10 @@ gdata_service_delete_entry_async (GDataService *self, GDataAuthorizationDomain *
        data->domain = (domain != NULL) ? g_object_ref (domain) : NULL;
        data->entry = g_object_ref (entry);
 
-       result = g_simple_async_result_new (G_OBJECT (self), callback, user_data, 
gdata_service_delete_entry_async);
-       g_simple_async_result_set_op_res_gpointer (result, data, (GDestroyNotify) 
delete_entry_async_data_free);
-       g_simple_async_result_run_in_thread (result, (GSimpleAsyncThreadFunc) delete_entry_thread, 
G_PRIORITY_DEFAULT, cancellable);
-       g_object_unref (result);
+       task = g_task_new (self, cancellable, callback, user_data);
+       g_task_set_source_tag (task, gdata_service_delete_entry_async);
+       g_task_set_task_data (task, g_steal_pointer (&data), (GDestroyNotify) delete_entry_async_data_free);
+       g_task_run_in_thread (task, delete_entry_thread);
 }
 
 /**
@@ -1805,18 +1754,13 @@ gdata_service_delete_entry_async (GDataService *self, GDataAuthorizationDomain *
 gboolean
 gdata_service_delete_entry_finish (GDataService *self, GAsyncResult *async_result, GError **error)
 {
-       GSimpleAsyncResult *result = G_SIMPLE_ASYNC_RESULT (async_result);
-
        g_return_val_if_fail (GDATA_IS_SERVICE (self), FALSE);
        g_return_val_if_fail (G_IS_ASYNC_RESULT (async_result), FALSE);
        g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+       g_return_val_if_fail (g_task_is_valid (async_result, self), FALSE);
+       g_return_val_if_fail (g_async_result_is_tagged (async_result, gdata_service_delete_entry_async), 
FALSE);
 
-       g_warn_if_fail (g_simple_async_result_get_source_tag (result) == gdata_service_delete_entry_async);
-
-       if (g_simple_async_result_propagate_error (result, error) == TRUE)
-               return FALSE;
-
-       return g_simple_async_result_get_op_res_gboolean (result);
+       return g_task_propagate_boolean (G_TASK (async_result), error);
 }
 
 /**


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]