[gnome-photos] create-collection-job, organize-collection-view: Convert to async API
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] create-collection-job, organize-collection-view: Convert to async API
- Date: Wed, 13 Apr 2016 15:34:07 +0000 (UTC)
commit 23919376f98ee6aba56af7aafd3639913a13b590
Author: Rafael Fonseca <r4f4rfs gmail com>
Date: Thu Mar 24 15:36:21 2016 +0100
create-collection-job, organize-collection-view: Convert to async API
https://bugzilla.gnome.org/show_bug.cgi?id=764086
src/photos-create-collection-job.c | 59 ++++++++++++++++++++-------------
src/photos-create-collection-job.h | 9 +++--
src/photos-organize-collection-view.c | 28 ++++++++++++----
3 files changed, 63 insertions(+), 33 deletions(-)
---
diff --git a/src/photos-create-collection-job.c b/src/photos-create-collection-job.c
index e8b1408..2859359 100644
--- a/src/photos-create-collection-job.c
+++ b/src/photos-create-collection-job.c
@@ -34,16 +34,15 @@
#include "photos-query-builder.h"
#include "photos-search-context.h"
#include "photos-tracker-queue.h"
+#include "photos-utils.h"
struct _PhotosCreateCollectionJob
{
GObject parent_instance;
- PhotosCreateCollectionJobCallback callback;
+ GError *queue_error;
PhotosTrackerQueue *queue;
- const gchar *created_urn;
gchar *name;
- gpointer user_data;
};
struct _PhotosCreateCollectionJobClass
@@ -64,7 +63,7 @@ G_DEFINE_TYPE (PhotosCreateCollectionJob, photos_create_collection_job, G_TYPE_O
static void
photos_create_collection_job_query_executed (GObject *source_object, GAsyncResult *res, gpointer user_data)
{
- PhotosCreateCollectionJob *self = PHOTOS_CREATE_COLLECTION_JOB (user_data);
+ GTask *task = G_TASK (user_data);
TrackerSparqlConnection *connection = TRACKER_SPARQL_CONNECTION (source_object);
GError *error;
GVariant *variant;
@@ -76,9 +75,8 @@ photos_create_collection_job_query_executed (GObject *source_object, GAsyncResul
variant = tracker_sparql_connection_update_blank_finish (connection, res, &error);
if (error != NULL)
{
- g_warning ("Unable to create collection: %s", error->message);
- g_error_free (error);
- goto out;
+ g_task_return_error (task, error);
+ return;
}
child = g_variant_get_child_value (variant, 0); /* variant is now aa{ss} */
@@ -104,13 +102,10 @@ photos_create_collection_job_query_executed (GObject *source_object, GAsyncResul
g_variant_unref (variant);
if (g_strcmp0 (key, "res") == 0)
- self->created_urn = val;
-
- out:
- if (self->callback != NULL)
- (*self->callback) (self->created_urn, self->user_data);
+ g_task_return_pointer (task, g_strdup (val), g_free);
+ else
+ g_task_return_new_error (task, PHOTOS_ERROR, 0, "Failed to parse GVariant");
- self->created_urn = NULL;
g_free (val);
g_free (key);
}
@@ -132,6 +127,7 @@ photos_create_collection_job_finalize (GObject *object)
{
PhotosCreateCollectionJob *self = PHOTOS_CREATE_COLLECTION_JOB (object);
+ g_clear_error (&self->queue_error);
g_free (self->name);
G_OBJECT_CLASS (photos_create_collection_job_parent_class)->finalize (object);
@@ -159,7 +155,7 @@ photos_create_collection_job_set_property (GObject *object, guint prop_id, const
static void
photos_create_collection_job_init (PhotosCreateCollectionJob *self)
{
- self->queue = photos_tracker_queue_dup_singleton (NULL, NULL);
+ self->queue = photos_tracker_queue_dup_singleton (NULL, &self->queue_error);
}
@@ -189,34 +185,51 @@ photos_create_collection_job_new (const gchar *name)
}
+gchar *
+photos_create_collection_job_finish (PhotosCreateCollectionJob *self, GAsyncResult *res, GError **error)
+{
+ GTask *task = G_TASK (res);
+
+ g_return_val_if_fail (g_task_is_valid (res, self), NULL);
+ g_return_val_if_fail (g_task_get_source_tag (task) == photos_create_collection_job_run, NULL);
+ g_return_val_if_fail (error == NULL || *error == NULL, NULL);
+
+ return g_task_propagate_pointer (task, error);
+}
+
+
void
photos_create_collection_job_run (PhotosCreateCollectionJob *self,
- PhotosCreateCollectionJobCallback callback,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
gpointer user_data)
{
GApplication *app;
PhotosQuery *query;
PhotosSearchContextState *state;
+ GTask *task;
+
+ task = g_task_new (self, cancellable, callback, user_data);
+ g_task_set_source_tag (task, photos_create_collection_job_run);
if (G_UNLIKELY (self->queue == NULL))
{
- if (callback != NULL)
- (*callback) (NULL, user_data);
- return;
+ g_task_return_error (task, g_error_copy (self->queue_error));
+ goto out;
}
- self->callback = callback;
- self->user_data = user_data;
-
app = g_application_get_default ();
state = photos_search_context_get_state (PHOTOS_SEARCH_CONTEXT (app));
query = photos_query_builder_create_collection_query (state, self->name);
photos_tracker_queue_update_blank (self->queue,
query->sparql,
- NULL,
+ cancellable,
photos_create_collection_job_query_executed,
- g_object_ref (self),
+ g_object_ref (task),
g_object_unref);
photos_query_free (query);
+
+ out:
+ g_object_unref (task);
}
diff --git a/src/photos-create-collection-job.h b/src/photos-create-collection-job.h
index 48740b0..05302fb 100644
--- a/src/photos-create-collection-job.h
+++ b/src/photos-create-collection-job.h
@@ -39,8 +39,6 @@ G_BEGIN_DECLS
(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
PHOTOS_TYPE_CREATE_COLLECTION_JOB))
-typedef void (*PhotosCreateCollectionJobCallback) (const gchar *, gpointer);
-
typedef struct _PhotosCreateCollectionJob PhotosCreateCollectionJob;
typedef struct _PhotosCreateCollectionJobClass PhotosCreateCollectionJobClass;
@@ -49,9 +47,14 @@ GType photos_create_collection_job_get_type (void) G_GN
PhotosCreateCollectionJob *photos_create_collection_job_new (const gchar *name);
void photos_create_collection_job_run (PhotosCreateCollectionJob *self,
- PhotosCreateCollectionJobCallback
callback,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
gpointer user_data);
+gchar *photos_create_collection_job_finish (PhotosCreateCollectionJob *self,
+ GAsyncResult *res,
+ GError **error);
+
G_END_DECLS
#endif /* PHOTOS_CREATE_COLLECTION_JOB_H */
diff --git a/src/photos-organize-collection-view.c b/src/photos-organize-collection-view.c
index 439d7d0..51e8309 100644
--- a/src/photos-organize-collection-view.c
+++ b/src/photos-organize-collection-view.c
@@ -112,13 +112,26 @@ photos_organize_collection_view_check_toggled (PhotosOrganizeCollectionView *sel
static void
-photos_organize_collection_view_create_collection_executed (const gchar *created_urn, gpointer user_data)
+photos_organize_collection_view_create_collection_executed (GObject *source_object, GAsyncResult *res,
gpointer user_data)
{
- PhotosOrganizeCollectionView *self = PHOTOS_ORGANIZE_COLLECTION_VIEW (user_data);
- PhotosOrganizeCollectionViewPrivate *priv = self->priv;
+ PhotosOrganizeCollectionView *self;
+ PhotosOrganizeCollectionViewPrivate *priv;
+ PhotosCreateCollectionJob *col_job = PHOTOS_CREATE_COLLECTION_JOB (source_object);
+ PhotosSetCollectionJob *set_job = NULL;
GtkTreeIter iter;
GtkTreePath *path = NULL;
- PhotosSetCollectionJob *job = NULL;
+ GError *error = NULL;
+ const gchar *created_urn;
+
+ created_urn = photos_create_collection_job_finish (col_job, res, &error);
+ if (error != NULL)
+ {
+ g_warning ("Unable to create collection: %s", error->message);
+ g_error_free (error);
+ }
+
+ self = PHOTOS_ORGANIZE_COLLECTION_VIEW (user_data);
+ priv = self->priv;
if (created_urn == NULL)
{
@@ -133,11 +146,11 @@ photos_organize_collection_view_create_collection_executed (const gchar *created
gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->model), &iter, path);
gtk_list_store_set (priv->model, &iter, PHOTOS_ORGANIZE_MODEL_ID, created_urn, -1);
- job = photos_set_collection_job_new (created_urn, TRUE);
- photos_set_collection_job_run (job, NULL, NULL);
+ set_job = photos_set_collection_job_new (created_urn, TRUE);
+ photos_set_collection_job_run (set_job, NULL, NULL);
out:
- g_clear_object (&job);
+ g_clear_object (&set_job);
gtk_tree_path_free (path);
g_object_unref (self);
}
@@ -210,6 +223,7 @@ photos_organize_collection_view_text_edited_real (PhotosOrganizeCollectionView *
job = photos_create_collection_job_new (new_text);
photos_create_collection_job_run (job,
+ NULL,
photos_organize_collection_view_create_collection_executed,
g_object_ref (self));
g_object_unref (job);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]