[gnome-photos] item-manager: Use the TrackerChangeMonitor
- From: Debarshi Ray <debarshir src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-photos] item-manager: Use the TrackerChangeMonitor
- Date: Sat, 18 Aug 2012 22:53:58 +0000 (UTC)
commit 010046f588b79d99163a8221782215a233b2003b
Author: Debarshi Ray <debarshir gnome org>
Date: Fri Aug 17 04:05:00 2012 +0200
item-manager: Use the TrackerChangeMonitor
src/photos-item-manager.c | 93 ++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 91 insertions(+), 2 deletions(-)
---
diff --git a/src/photos-item-manager.c b/src/photos-item-manager.c
index 4316a32..fe44988 100644
--- a/src/photos-item-manager.c
+++ b/src/photos-item-manager.c
@@ -26,17 +26,97 @@
#include "photos-item-manager.h"
#include "photos-item-model.h"
#include "photos-local-item.h"
+#include "photos-query.h"
+#include "photos-single-item-job.h"
+#include "photos-tracker-change-event.h"
+#include "photos-tracker-change-monitor.h"
struct _PhotosItemManagerPrivate
{
GtkListStore *model;
+ PhotosTrackerChangeMonitor *monitor;
};
G_DEFINE_TYPE (PhotosItemManager, photos_item_manager, PHOTOS_TYPE_BASE_MANAGER);
+static void
+photos_item_manager_item_created_executed (TrackerSparqlCursor *cursor, gpointer user_data)
+{
+ PhotosItemManager *self = PHOTOS_ITEM_MANAGER (user_data);
+
+ if (cursor == NULL)
+ goto out;
+
+ photos_item_manager_add_item (self, cursor);
+
+ out:
+ g_object_unref (self);
+}
+
+
+static void
+photos_item_manager_item_created (PhotosItemManager *self, const gchar *urn)
+{
+ PhotosSingleItemJob *job;
+
+ job = photos_single_item_job_new (urn);
+ photos_single_item_job_run (job,
+ PHOTOS_QUERY_FLAGS_NONE,
+ photos_item_manager_item_created_executed,
+ g_object_ref (self));
+ g_object_unref (job);
+}
+
+
+static void
+photos_item_manager_changes_pending_foreach (gpointer key, gpointer value, gpointer user_data)
+{
+ PhotosItemManager *self = PHOTOS_ITEM_MANAGER (user_data);
+ PhotosItemManagerPrivate *priv = self->priv;
+ PhotosTrackerChangeEvent *change_event = (PhotosTrackerChangeEvent *) value;
+ PhotosTrackerChangeEventType change_type;
+ const gchar *change_urn;
+
+ change_type = photos_tracker_change_event_get_type (change_event);
+ change_urn = photos_tracker_change_event_get_urn (change_event);
+
+ if (change_type == PHOTOS_TRACKER_CHANGE_EVENT_CHANGED)
+ {
+ GObject *object;
+
+ object = photos_base_manager_get_object_by_id (PHOTOS_BASE_MANAGER (self), change_urn);
+ if (object != NULL)
+ photos_base_item_refresh (PHOTOS_BASE_ITEM (object));
+ }
+ else if (change_type == PHOTOS_TRACKER_CHANGE_EVENT_CREATED)
+ {
+ photos_item_manager_item_created (self, change_urn);
+ }
+ else if (change_type == PHOTOS_TRACKER_CHANGE_EVENT_DELETED)
+ {
+ GObject *object;
+
+ object = photos_base_manager_get_object_by_id (PHOTOS_BASE_MANAGER (self), change_urn);
+ if (object != NULL)
+ {
+ photos_base_item_destroy (PHOTOS_BASE_ITEM (object));
+ photos_base_manager_remove_object_by_id (PHOTOS_BASE_MANAGER (self), change_urn);
+ }
+ }
+}
+
+
+static void
+photos_item_manager_changes_pending (PhotosTrackerChangeMonitor *monitor, GHashTable *changes, gpointer user_data)
+{
+ PhotosItemManager *self = PHOTOS_ITEM_MANAGER (user_data);
+ g_hash_table_foreach (changes, photos_item_manager_changes_pending_foreach, self);
+}
+
+
static gboolean
photos_item_manager_set_active_object (PhotosBaseManager *manager, GObject *object)
{
@@ -88,8 +168,10 @@ static void
photos_item_manager_dispose (GObject *object)
{
PhotosItemManager *self = PHOTOS_ITEM_MANAGER (object);
+ PhotosItemManagerPrivate *priv = self->priv;
- g_clear_object (&self->priv->model);
+ g_clear_object (&priv->model);
+ g_clear_object (&priv->monitor);
G_OBJECT_CLASS (photos_item_manager_parent_class)->dispose (object);
}
@@ -98,8 +180,15 @@ photos_item_manager_dispose (GObject *object)
static void
photos_item_manager_init (PhotosItemManager *self)
{
+ PhotosItemManagerPrivate *priv = self->priv;
+
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, PHOTOS_TYPE_ITEM_MANAGER, PhotosItemManagerPrivate);
- self->priv->model = photos_item_model_new ();
+ priv = self->priv;
+
+ priv->model = photos_item_model_new ();
+
+ priv->monitor = photos_tracker_change_monitor_new ();
+ g_signal_connect (priv->monitor, "changes-pending", G_CALLBACK (photos_item_manager_changes_pending), self);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]