[frogr] Separated photosets into local and remote ones in the model
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [frogr] Separated photosets into local and remote ones in the model
- Date: Sun, 11 Nov 2012 00:06:42 +0000 (UTC)
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]