[gnome-photos] tracker-controller: Delay reacting to changes in GOA accounts



commit 6e5e14ef25c9611c17b00f0f70f632c430983533
Author: Debarshi Ray <debarshir gnome org>
Date:   Thu Jan 2 14:01:14 2014 +0100

    tracker-controller: Delay reacting to changes in GOA accounts
    
    We only need to react to changes in GOA accounts when we are in the
    relevant mode. eg., there is no need to do anything if we are in the
    preview.

 src/photos-tracker-collections-controller.c |    3 +-
 src/photos-tracker-controller.c             |   78 ++++++++++++++++++++++++++-
 src/photos-tracker-favorites-controller.c   |    3 +-
 src/photos-tracker-overview-controller.c    |    3 +-
 4 files changed, 82 insertions(+), 5 deletions(-)
---
diff --git a/src/photos-tracker-collections-controller.c b/src/photos-tracker-collections-controller.c
index 52c9d9e..f5658c5 100644
--- a/src/photos-tracker-collections-controller.c
+++ b/src/photos-tracker-collections-controller.c
@@ -22,6 +22,7 @@
 #include "config.h"
 
 #include "photos-collection-manager.h"
+#include "photos-mode-controller.h"
 #include "photos-offset-collections-controller.h"
 #include "photos-query-builder.h"
 #include "photos-tracker-collections-controller.h"
@@ -121,5 +122,5 @@ photos_tracker_collections_controller_class_init (PhotosTrackerCollectionsContro
 PhotosTrackerController *
 photos_tracker_collections_controller_dup_singleton (void)
 {
-  return g_object_new (PHOTOS_TYPE_TRACKER_COLLECTIONS_CONTROLLER, NULL);
+  return g_object_new (PHOTOS_TYPE_TRACKER_COLLECTIONS_CONTROLLER, "mode", PHOTOS_WINDOW_MODE_COLLECTIONS, 
NULL);
 }
diff --git a/src/photos-tracker-controller.c b/src/photos-tracker-controller.c
index 3b802cf..1ffc6d5 100644
--- a/src/photos-tracker-controller.c
+++ b/src/photos-tracker-controller.c
@@ -1,6 +1,6 @@
 /*
  * Photos - access, organize and share your photos on GNOME
- * Copyright © 2012, 2013 Red Hat, Inc.
+ * Copyright © 2012, 2013, 2014 Red Hat, Inc.
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -29,8 +29,10 @@
 #include <glib/gi18n.h>
 
 #include "photos-collection-manager.h"
+#include "photos-enums.h"
 #include "photos-item-manager.h"
 #include "photos-marshalers.h"
+#include "photos-mode-controller.h"
 #include "photos-query-builder.h"
 #include "photos-source-manager.h"
 #include "photos-tracker-controller.h"
@@ -44,18 +46,27 @@ struct _PhotosTrackerControllerPrivate
   PhotosBaseManager *col_mngr;
   PhotosBaseManager *item_mngr;
   PhotosBaseManager *src_mngr;
+  PhotosModeController *mode_cntrlr;
   PhotosOffsetController *offset_cntrlr;
   PhotosQuery *current_query;
   PhotosTrackerQueue *queue;
+  PhotosWindowMode mode;
   gboolean is_started;
   gboolean query_queued;
   gboolean querying;
+  gboolean refresh_pending;
   gint query_queued_flags;
   gint64 last_query_time;
 };
 
 enum
 {
+  PROP_0,
+  PROP_MODE
+};
+
+enum
+{
   QUERY_ERROR,
   QUERY_STATUS_CHANGED,
   LAST_SIGNAL
@@ -253,7 +264,7 @@ photos_tracker_controller_refresh_internal (PhotosTrackerController *self, gint
 
 
 static void
-photos_tracker_controller_source_object_added_removed (PhotosTrackerController *self)
+photos_tracker_controller_refresh_for_source (PhotosTrackerController *self)
 {
   PhotosTrackerControllerPrivate *priv = self->priv;
 
@@ -268,6 +279,34 @@ photos_tracker_controller_source_object_added_removed (PhotosTrackerController *
 
       g_free (id);
     }
+
+  priv->refresh_pending = FALSE;
+}
+
+
+static void
+photos_tracker_controller_source_object_added_removed (PhotosTrackerController *self)
+{
+  PhotosTrackerControllerPrivate *priv = self->priv;
+  PhotosWindowMode mode;
+
+  mode = photos_mode_controller_get_window_mode (priv->mode_cntrlr);
+  if (mode == priv->mode)
+    photos_tracker_controller_refresh_for_source (self);
+  else
+    priv->refresh_pending = TRUE;
+}
+
+
+static void
+photos_tracker_controller_window_mode_changed (PhotosTrackerController *self,
+                                               PhotosWindowMode mode,
+                                               PhotosWindowMode old_mode)
+{
+  PhotosTrackerControllerPrivate *priv = self->priv;
+
+  if (priv->refresh_pending && mode == priv->mode)
+    photos_tracker_controller_refresh_for_source (self);
 }
 
 
@@ -279,6 +318,12 @@ photos_tracker_controller_constructed (GObject *object)
 
   G_OBJECT_CLASS (photos_tracker_controller_parent_class)->constructed (object);
 
+  priv->mode_cntrlr = photos_mode_controller_dup_singleton ();
+  g_signal_connect_swapped (priv->mode_cntrlr,
+                            "window-mode-changed",
+                            G_CALLBACK (photos_tracker_controller_window_mode_changed),
+                            self);
+
   priv->offset_cntrlr = PHOTOS_TRACKER_CONTROLLER_GET_CLASS (self)->get_offset_controller ();
   g_signal_connect (priv->offset_cntrlr,
                     "offset-changed",
@@ -296,6 +341,7 @@ photos_tracker_controller_dispose (GObject *object)
   g_clear_object (&priv->col_mngr);
   g_clear_object (&priv->item_mngr);
   g_clear_object (&priv->src_mngr);
+  g_clear_object (&priv->mode_cntrlr);
   g_clear_object (&priv->offset_cntrlr);
   g_clear_object (&priv->queue);
 
@@ -319,6 +365,24 @@ photos_tracker_controller_finalize (GObject *object)
 
 
 static void
+photos_tracker_controller_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec 
*pspec)
+{
+  PhotosTrackerController *self = PHOTOS_TRACKER_CONTROLLER (object);
+
+  switch (prop_id)
+    {
+    case PROP_MODE:
+      self->priv->mode = (PhotosWindowMode) g_value_get_enum (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
+
+static void
 photos_tracker_controller_init (PhotosTrackerController *self)
 {
   PhotosTrackerControllerPrivate *priv;
@@ -360,8 +424,18 @@ photos_tracker_controller_class_init (PhotosTrackerControllerClass *class)
 
   object_class->constructed = photos_tracker_controller_constructed;
   object_class->dispose = photos_tracker_controller_dispose;
+  object_class->set_property = photos_tracker_controller_set_property;
   object_class->finalize = photos_tracker_controller_finalize;
 
+  g_object_class_install_property (object_class,
+                                   PROP_MODE,
+                                   g_param_spec_enum ("mode",
+                                                      "PhotosWindowMode enum",
+                                                      "The mode handled by this controller",
+                                                      PHOTOS_TYPE_WINDOW_MODE,
+                                                      PHOTOS_WINDOW_MODE_NONE,
+                                                      G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE));
+
   signals[QUERY_ERROR] = g_signal_new ("query-error",
                                        G_TYPE_FROM_CLASS (class),
                                        G_SIGNAL_RUN_LAST,
diff --git a/src/photos-tracker-favorites-controller.c b/src/photos-tracker-favorites-controller.c
index 905ba7a..68a4c64 100644
--- a/src/photos-tracker-favorites-controller.c
+++ b/src/photos-tracker-favorites-controller.c
@@ -22,6 +22,7 @@
 #include "config.h"
 
 #include "photos-collection-manager.h"
+#include "photos-mode-controller.h"
 #include "photos-offset-favorites-controller.h"
 #include "photos-query-builder.h"
 #include "photos-tracker-favorites-controller.h"
@@ -121,5 +122,5 @@ photos_tracker_favorites_controller_class_init (PhotosTrackerFavoritesController
 PhotosTrackerController *
 photos_tracker_favorites_controller_dup_singleton (void)
 {
-  return g_object_new (PHOTOS_TYPE_TRACKER_FAVORITES_CONTROLLER, NULL);
+  return g_object_new (PHOTOS_TYPE_TRACKER_FAVORITES_CONTROLLER, "mode", PHOTOS_WINDOW_MODE_FAVORITES, NULL);
 }
diff --git a/src/photos-tracker-overview-controller.c b/src/photos-tracker-overview-controller.c
index fe8a19a..4ccfd5b 100644
--- a/src/photos-tracker-overview-controller.c
+++ b/src/photos-tracker-overview-controller.c
@@ -25,6 +25,7 @@
 
 #include "config.h"
 
+#include "photos-mode-controller.h"
 #include "photos-offset-overview-controller.h"
 #include "photos-query-builder.h"
 #include "photos-tracker-overview-controller.h"
@@ -88,5 +89,5 @@ photos_tracker_overview_controller_class_init (PhotosTrackerOverviewControllerCl
 PhotosTrackerController *
 photos_tracker_overview_controller_dup_singleton (void)
 {
-  return g_object_new (PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER, NULL);
+  return g_object_new (PHOTOS_TYPE_TRACKER_OVERVIEW_CONTROLLER, "mode", PHOTOS_WINDOW_MODE_OVERVIEW, NULL);
 }


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