diff options
author | Georges Basile Stavracas Neto <georges.stavracas@gmail.com> | 2022-02-08 12:36:15 -0300 |
---|---|---|
committer | Bastien Nocera <hadess@hadess.net> | 2022-02-09 18:13:27 +0100 |
commit | 113746edf6a5491425da941c8fd89ef4b319f1a8 (patch) | |
tree | 1823ee10c915b2ab2f24e184ff49b1ff36e5f7e2 | |
parent | 7be70893490a561934bc848120adbffc5b4e4656 (diff) | |
download | totem-113746edf6a5491425da941c8fd89ef4b319f1a8.tar.gz |
playlist: Port to GTask
GSimpleAsyncResult is deprecated, and it makes compiling
Totem a bit noisy.
The port is pretty straightforward, since TotemPlaylist
usage of GSimpleAsyncResult is not complicated. The major
difference is that GTasks can only be returned once, so
replace the following (pseudo)code:
```
if (error)
async_result.set_error(error)
async_result.set_boolean(result)
async_result.complete()
```
by this:
```
if (error)
task.return_error(error)
else
task.return_boolean(result)
```
-rw-r--r-- | src/totem-playlist.c | 46 |
1 files changed, 18 insertions, 28 deletions
diff --git a/src/totem-playlist.c b/src/totem-playlist.c index 95564c31e..dea9b1a0e 100644 --- a/src/totem-playlist.c +++ b/src/totem-playlist.c @@ -1075,8 +1075,8 @@ handle_parse_result (TotemPlParserResult res, TotemPlaylist *playlist, const gch static void add_mrl_cb (TotemPlParser *parser, GAsyncResult *result, AddMrlData *data) { + g_autoptr(GTask) task = NULL; TotemPlParserResult res; - GSimpleAsyncResult *async_result; GError *error = NULL; gboolean ret; @@ -1091,19 +1091,14 @@ add_mrl_cb (TotemPlParser *parser, GAsyncResult *result, AddMrlData *data) /* Create an async result which will return the result to the code which called totem_playlist_add_mrl() */ ret = handle_parse_result (res, data->playlist, data->mrl, data->display_name, &error); - async_result = g_simple_async_result_new (G_OBJECT (data->playlist), data->callback, data->user_data, totem_playlist_add_mrl); - if (error != NULL) - g_simple_async_result_take_error (async_result, error); - - /* Handle the various return cases from the playlist parser */ - g_simple_async_result_set_op_res_gboolean (async_result, ret); - - /* Free the closure's data, now that we're finished with it */ - add_mrl_data_free (data); + task = g_task_new (data->playlist, NULL, data->callback, data->user_data); + g_task_set_task_data (task, data, (GDestroyNotify) add_mrl_data_free); + g_task_set_source_tag (task, totem_playlist_add_mrl); - /* Synchronously call the calling code's callback function (i.e. what was passed to totem_playlist_add_mrl()'s @callback parameter) - * in the main thread to return the result */ - g_simple_async_result_complete (async_result); + if (error != NULL) + g_task_return_error (task, error); + else + g_task_return_boolean (task, ret); } void @@ -1135,12 +1130,9 @@ totem_playlist_add_mrl (TotemPlaylist *playlist, const char *mrl, const char *di gboolean totem_playlist_add_mrl_finish (TotemPlaylist *playlist, GAsyncResult *result, GError **error) { - g_assert (g_simple_async_result_get_source_tag (G_SIMPLE_ASYNC_RESULT (result)) == totem_playlist_add_mrl); + g_assert (g_task_get_source_tag (G_TASK (result)) == totem_playlist_add_mrl); - if (g_simple_async_result_get_op_res_gboolean (G_SIMPLE_ASYNC_RESULT (result))) - return TRUE; - g_simple_async_result_propagate_error (G_SIMPLE_ASYNC_RESULT (result), error); - return FALSE; + return g_task_propagate_boolean (G_TASK (result), error); } gboolean @@ -1265,14 +1257,12 @@ add_mrls_finish_operation (AddMrlsOperationData *operation_data) /* Check whether this is the final callback invocation; iff it is, we can call the user's callback for the entire operation and free the * operation data */ if (g_atomic_int_dec_and_test (&(operation_data->entries_remaining)) == TRUE) { - GSimpleAsyncResult *async_result; + g_autoptr(GTask) task = NULL; - async_result = g_simple_async_result_new (G_OBJECT (operation_data->playlist), operation_data->callback, operation_data->user_data, - totem_playlist_add_mrls); - g_simple_async_result_complete (async_result); - g_object_unref (async_result); - - add_mrls_operation_data_free (operation_data); + task = g_task_new (operation_data->playlist, NULL, operation_data->callback, operation_data->user_data); + g_task_set_task_data (task, operation_data, (GDestroyNotify) add_mrls_operation_data_free); + g_task_set_source_tag (task, totem_playlist_add_mrls); + g_task_return_boolean (task, TRUE); } } @@ -1417,12 +1407,12 @@ totem_playlist_add_mrls_finish (TotemPlaylist *self, GError **error) { g_return_val_if_fail (TOTEM_IS_PLAYLIST (self), FALSE); - g_return_val_if_fail (G_IS_ASYNC_RESULT (result), FALSE); + g_return_val_if_fail (G_IS_TASK (result), FALSE); g_return_val_if_fail (error == NULL || *error == NULL, FALSE); - g_return_val_if_fail (g_simple_async_result_is_valid (result, G_OBJECT (self), totem_playlist_add_mrls), FALSE); + g_return_val_if_fail (g_task_is_valid (result, G_OBJECT (self)), FALSE); /* We don't have anything to return at the moment. */ - return TRUE; + return g_task_propagate_boolean (G_TASK (result), error); } static gboolean |