[gnome-documents] utils: Port gd_queue_thumbnail_job_for_file_async to GTask
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-documents] utils: Port gd_queue_thumbnail_job_for_file_async to GTask
- Date: Tue, 4 Apr 2017 17:23:20 +0000 (UTC)
commit 0cf4980b0056501a94af0fe377e4e969a694a55a
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Mar 31 20:32:21 2017 +0200
utils: Port gd_queue_thumbnail_job_for_file_async to GTask
... and also add error handling. GTask makes it almost trivial to throw
an error, so let's just do that and make the API a tad more
future-proof. Since GnomeDesktopThumbnailFactory doesn't throw a real
GError, we fake one for the time being.
https://bugzilla.gnome.org/show_bug.cgi?id=780779
src/lib/gd-utils.c | 59 +++++++++++++++++++++------------------------------
src/lib/gd-utils.h | 2 +-
2 files changed, 25 insertions(+), 36 deletions(-)
---
diff --git a/src/lib/gd-utils.c b/src/lib/gd-utils.c
index bc21649..d319482 100644
--- a/src/lib/gd-utils.c
+++ b/src/lib/gd-utils.c
@@ -34,30 +34,29 @@
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE"," \
G_FILE_ATTRIBUTE_TIME_MODIFIED
-static gboolean
-create_thumbnail (GIOSchedulerJob *job,
- GCancellable *cancellable,
- gpointer user_data)
+static void
+create_thumbnail (GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable)
{
- GSimpleAsyncResult *result = user_data;
- GFile *file = G_FILE (g_async_result_get_source_object (G_ASYNC_RESULT (result)));
+ GFile *file = G_FILE (source_object);
GnomeDesktopThumbnailFactory *factory = NULL;
+ GError *error = NULL;
GFileInfo *info = NULL;
gchar *uri = NULL;
GdkPixbuf *pixbuf = NULL;
guint64 mtime;
uri = g_file_get_uri (file);
+
info = g_file_query_info (file, ATTRIBUTES_FOR_THUMBNAIL,
G_FILE_QUERY_INFO_NONE,
- NULL, NULL);
+ NULL, &error);
- /* we don't care about reporting errors here, just fail the
- * thumbnail.
- */
if (info == NULL)
{
- g_simple_async_result_set_op_res_gboolean (result, FALSE);
+ g_task_return_error (task, error);
goto out;
}
@@ -68,27 +67,20 @@ create_thumbnail (GIOSchedulerJob *job,
(factory,
uri, g_file_info_get_content_type (info));
- if (pixbuf != NULL)
- {
- gnome_desktop_thumbnail_factory_save_thumbnail (factory, pixbuf,
- uri, (time_t) mtime);
- g_simple_async_result_set_op_res_gboolean (result, TRUE);
- }
- else
+ if (pixbuf == NULL)
{
- g_simple_async_result_set_op_res_gboolean (result, FALSE);
+ g_task_return_new_error (task, G_IO_ERROR, G_IO_ERROR_FAILED, "GnomeDesktopThumbnailFactory failed");
+ goto out;
}
- out:
- g_simple_async_result_complete_in_idle (result);
- g_object_unref (result);
+ gnome_desktop_thumbnail_factory_save_thumbnail (factory, pixbuf, uri, (time_t) mtime);
+ g_task_return_boolean (task, TRUE);
+ out:
g_clear_object (&info);
- g_object_unref (file);
g_clear_object (&factory);
g_clear_object (&pixbuf);
g_free (uri);
- return FALSE;
}
void
@@ -96,23 +88,20 @@ gd_queue_thumbnail_job_for_file_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data)
{
- GSimpleAsyncResult *result;
+ GTask *task;
- result = g_simple_async_result_new (G_OBJECT (file),
- callback, user_data,
- gd_queue_thumbnail_job_for_file_async);
+ task = g_task_new (file, NULL, callback, user_data);
+ g_task_set_source_tag (task, gd_queue_thumbnail_job_for_file_async);
+ g_task_run_in_thread (task, create_thumbnail);
- g_io_scheduler_push_job (create_thumbnail,
- result, NULL,
- G_PRIORITY_DEFAULT, NULL);
+ g_object_unref (task);
}
gboolean
-gd_queue_thumbnail_job_for_file_finish (GAsyncResult *res)
+gd_queue_thumbnail_job_for_file_finish (GAsyncResult *res, GError **error)
{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (res);
-
- return g_simple_async_result_get_op_res_gboolean (simple);
+ GTask *task = G_TASK (res);
+ return g_task_propagate_boolean (task, error);
}
const char *
diff --git a/src/lib/gd-utils.h b/src/lib/gd-utils.h
index d4ff1bb..b05fcb3 100644
--- a/src/lib/gd-utils.h
+++ b/src/lib/gd-utils.h
@@ -29,7 +29,7 @@ void gd_queue_thumbnail_job_for_file_async (GFile *file,
GAsyncReadyCallback callback,
gpointer user_data);
-gboolean gd_queue_thumbnail_job_for_file_finish (GAsyncResult *res);
+gboolean gd_queue_thumbnail_job_for_file_finish (GAsyncResult *res, GError **error);
const char *gd_filename_get_extension_offset (const char *filename);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]