[frogr] Separated photosets into local and remote ones in the model



commit 36b24c0ce099be243fff53250c316bb63e3dcffe
Author: Mario Sanchez Prada <msanchez2 gnome org>
Date:   Thu Nov 8 13:25:05 2012 +0100

    Separated photosets into local and remote ones in the model

 src/frogr-controller.c            |    2 +-
 src/frogr-create-new-set-dialog.c |    2 +-
 src/frogr-main-view-model.c       |  114 +++++++++++++++++++++++++------------
 src/frogr-main-view-model.h       |   13 ++--
 4 files changed, 86 insertions(+), 45 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 161ada9..d5982e9 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -1446,7 +1446,7 @@ _fetch_photosets_cb (GObject *object, GAsyncResult *res, gpointer data)
 
   /* Update main view's model */
   mainview_model = frogr_main_view_get_model (priv->mainview);
-  frogr_main_view_model_set_photosets (mainview_model, sets_list);
+  frogr_main_view_model_set_remote_photosets (mainview_model, sets_list);
 
   priv->fetching_photosets = FALSE;
 }
diff --git a/src/frogr-create-new-set-dialog.c b/src/frogr-create-new-set-dialog.c
index 9cb0965..7b189e9 100644
--- a/src/frogr-create-new-set-dialog.c
+++ b/src/frogr-create-new-set-dialog.c
@@ -184,7 +184,7 @@ _update_model (FrogrCreateNewSetDialog *self,
 
   /* Add the set to the model */
   new_set = frogr_photoset_new (title, description);
-  frogr_main_view_model_add_photoset (mainview_model, new_set);
+  frogr_main_view_model_add_local_photoset (mainview_model, new_set);
 
   /* Add the set to the list of sets for each picture */
   for (item = priv->pictures; item; item = g_slist_next (item))
diff --git a/src/frogr-main-view-model.c b/src/frogr-main-view-model.c
index 2250405..db8f3be 100644
--- a/src/frogr-main-view-model.c
+++ b/src/frogr-main-view-model.c
@@ -39,8 +39,9 @@ struct _FrogrMainViewModelPrivate
   GSList *pictures_list_as_loaded;
   guint n_pictures;
 
-  GSList *photosets_list;
-  guint n_photosets;
+  GSList *remote_sets;
+  GSList *local_sets;
+  GSList *all_sets;
 
   GSList *groups_list;
   guint n_groups;
@@ -123,6 +124,18 @@ _compare_pictures_by_property (FrogrPicture *p1, FrogrPicture *p2,
   return result;
 }
 
+static gint
+_compare_photosets (FrogrPhotoSet *photoset1, FrogrPhotoSet *photoset2)
+{
+  g_return_val_if_fail (FROGR_IS_PHOTOSET (photoset1), 1);
+  g_return_val_if_fail (FROGR_IS_PHOTOSET (photoset2), -1);
+
+  if (photoset1 == photoset2)
+    return 0;
+
+  return g_strcmp0 (frogr_photoset_get_id (photoset1), frogr_photoset_get_id (photoset2));
+}
+
 static void
 _frogr_main_view_model_dispose (GObject* object)
 {
@@ -142,11 +155,24 @@ _frogr_main_view_model_dispose (GObject* object)
       priv->pictures_list_as_loaded = NULL;
     }
 
-  if (priv->photosets_list)
+  if (priv->remote_sets)
+    {
+      g_slist_foreach (priv->remote_sets, (GFunc)g_object_unref, NULL);
+      g_slist_free (priv->remote_sets);
+      priv->remote_sets = NULL;
+    }
+
+  if (priv->local_sets)
     {
-      g_slist_foreach (priv->photosets_list, (GFunc)g_object_unref, NULL);
-      g_slist_free (priv->photosets_list);
-      priv->photosets_list = NULL;
+      g_slist_foreach (priv->local_sets, (GFunc)g_object_unref, NULL);
+      g_slist_free (priv->local_sets);
+      priv->local_sets = NULL;
+    }
+
+  if (priv->all_sets)
+    {
+      g_slist_free (priv->all_sets);
+      priv->all_sets = NULL;
     }
 
   if (priv->groups_list)
@@ -223,8 +249,9 @@ frogr_main_view_model_init (FrogrMainViewModel *self)
   priv->pictures_list_as_loaded = NULL;
   priv->n_pictures = 0;
 
-  priv->photosets_list = NULL;
-  priv->n_photosets = 0;
+  priv->remote_sets = NULL;
+  priv->local_sets = NULL;
+  priv->all_sets = NULL;
 
   priv->groups_list = NULL;
   priv->n_groups = 0;
@@ -370,24 +397,24 @@ frogr_main_view_model_reorder_pictures (FrogrMainViewModel *self,
 }
 
 void
-frogr_main_view_model_add_photoset (FrogrMainViewModel *self,
-                                    FrogrPhotoSet *set)
+frogr_main_view_model_set_remote_photosets (FrogrMainViewModel *self,
+                                            GSList *remote_sets)
 {
   FrogrMainViewModelPrivate *priv = NULL;
 
   g_return_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self));
-  g_return_if_fail(FROGR_IS_PHOTOSET (set));
 
-  /* When adding one by one we prepend always to keep the order */
   priv = FROGR_MAIN_VIEW_MODEL_GET_PRIVATE (self);
-  priv->photosets_list = g_slist_prepend (priv->photosets_list, set);
-  priv->n_photosets++;
 
-  g_object_ref (set);
+  /* Remove all the remote photosets */
+  frogr_main_view_model_remove_remote_photosets (self);
+
+  /* Set photophotosets */
+  priv->remote_sets = remote_sets;
 }
 
 void
-frogr_main_view_model_remove_all_photosets (FrogrMainViewModel *self)
+frogr_main_view_model_remove_remote_photosets (FrogrMainViewModel *self)
 {
   FrogrMainViewModelPrivate *priv = NULL;
 
@@ -395,51 +422,64 @@ frogr_main_view_model_remove_all_photosets (FrogrMainViewModel *self)
 
   priv = FROGR_MAIN_VIEW_MODEL_GET_PRIVATE (self);
 
-  g_slist_foreach (priv->photosets_list, (GFunc)g_object_unref, NULL);
-  g_slist_free (priv->photosets_list);
+  g_slist_foreach (priv->remote_sets, (GFunc)g_object_unref, NULL);
+  g_slist_free (priv->remote_sets);
 
-  priv->photosets_list = NULL;
-  priv->n_photosets = 0;
+  priv->remote_sets = NULL;
 }
 
-guint
-frogr_main_view_model_n_photosets (FrogrMainViewModel *self)
+void
+frogr_main_view_model_add_local_photoset (FrogrMainViewModel *self,
+                                          FrogrPhotoSet *set)
 {
   FrogrMainViewModelPrivate *priv = NULL;
 
-  g_return_val_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self), 0);
+  g_return_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self));
+  g_return_if_fail(FROGR_IS_PHOTOSET (set));
 
+  /* When adding one by one we prepend always to keep the order */
   priv = FROGR_MAIN_VIEW_MODEL_GET_PRIVATE (self);
-  return priv->n_photosets;
+  priv->local_sets = g_slist_prepend (priv->local_sets, set);
+
+  g_object_ref (set);
 }
 
 GSList *
 frogr_main_view_model_get_photosets (FrogrMainViewModel *self)
 {
   FrogrMainViewModelPrivate *priv = NULL;
+  GSList *list = NULL;
+  GSList *current = NULL;
 
-  g_return_val_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self), NULL);
+  g_return_val_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self), 0);
 
   priv = FROGR_MAIN_VIEW_MODEL_GET_PRIVATE (self);
-  return priv->photosets_list;
+
+  /* Copy the list of remote sets and add those locally added */
+  list = g_slist_copy (priv->remote_sets);
+  for (current = priv->local_sets; current; current = g_slist_next (current))
+    {
+      if (!g_slist_find_custom (list, current->data, (GCompareFunc)_compare_photosets))
+        list = g_slist_prepend (list, current->data);
+    }
+
+  /* Update internal pointers to the result list */
+  if (priv->all_sets)
+    g_slist_free (priv->all_sets);
+  priv->all_sets = list;
+
+  return priv->all_sets;
 }
 
-void
-frogr_main_view_model_set_photosets (FrogrMainViewModel *self,
-                                     GSList *photosets_list)
+guint
+frogr_main_view_model_n_photosets (FrogrMainViewModel *self)
 {
   FrogrMainViewModelPrivate *priv = NULL;
 
-  g_return_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self));
+  g_return_val_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self), 0);
 
   priv = FROGR_MAIN_VIEW_MODEL_GET_PRIVATE (self);
-
-  /* Remove all the photosets */
-  frogr_main_view_model_remove_all_photosets (self);
-
-  /* Set photophotosets */
-  priv->photosets_list = photosets_list;
-  priv->n_photosets = g_slist_length (photosets_list);
+  return g_slist_length (priv->remote_sets) + g_slist_length (priv->local_sets);
 }
 
 void
diff --git a/src/frogr-main-view-model.h b/src/frogr-main-view-model.h
index 0131e23..7fe1561 100644
--- a/src/frogr-main-view-model.h
+++ b/src/frogr-main-view-model.h
@@ -73,17 +73,18 @@ void frogr_main_view_model_reorder_pictures (FrogrMainViewModel *self,
                                              gboolean reversed);
 /* Photosets */
 
-void frogr_main_view_model_add_photoset (FrogrMainViewModel *self,
-                                         FrogrPhotoSet *fset);
+void frogr_main_view_model_set_remote_photosets (FrogrMainViewModel *self,
+                                                 GSList *photosets_list);
 
-void frogr_main_view_model_remove_all_photosets (FrogrMainViewModel *self);
+void frogr_main_view_model_remove_remote_photosets (FrogrMainViewModel *self);
 
-guint frogr_main_view_model_n_photosets (FrogrMainViewModel *self);
+void frogr_main_view_model_add_local_photoset (FrogrMainViewModel *self,
+                                               FrogrPhotoSet *fset);
 
 GSList *frogr_main_view_model_get_photosets (FrogrMainViewModel *self);
 
-void frogr_main_view_model_set_photosets (FrogrMainViewModel *self,
-                                          GSList *photosets_list);
+guint frogr_main_view_model_n_photosets (FrogrMainViewModel *self);
+
 /* Groups */
 
 void frogr_main_view_model_add_group (FrogrMainViewModel *self,



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