[frogr] Added extra checks when receiving sets, groups and tags



commit c2b359ec3dedb6089c4c99371754fba7803202be
Author: Mario Sanchez Prada <msanchez gnome org>
Date:   Sun Nov 11 00:54:28 2012 +0100

    Added extra checks when receiving sets, groups and tags

 src/frogr-controller.c |   81 +++++++++++++++++++++++++++--------------------
 1 files changed, 46 insertions(+), 35 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 1b6a46a..a6f8378 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -1401,7 +1401,6 @@ _fetch_photosets_cb (GObject *object, GAsyncResult *res, gpointer data)
   FspSession *session = NULL;
   FrogrController *controller = NULL;
   FrogrControllerPrivate *priv = NULL;
-  FrogrModel *model = NULL;
   GSList *data_sets_list = NULL;
   GSList *sets_list = NULL;
   GError *error = NULL;
@@ -1425,8 +1424,6 @@ _fetch_photosets_cb (GObject *object, GAsyncResult *res, gpointer data)
     }
   else
     {
-      priv->photosets_fetched = TRUE;
-
       if (data_sets_list)
         {
           GSList *item = NULL;
@@ -1435,24 +1432,29 @@ _fetch_photosets_cb (GObject *object, GAsyncResult *res, gpointer data)
           for (item = data_sets_list; item; item = g_slist_next (item))
             {
               current_data_set = FSP_DATA_PHOTO_SET (item->data);
-              current_set = frogr_photoset_new (current_data_set->id,
-                                                current_data_set->title,
-                                                current_data_set->description);
-              frogr_photoset_set_primary_photo_id (current_set, current_data_set->primary_photo_id);
-              frogr_photoset_set_n_photos (current_set, current_data_set->n_photos);
-
-              sets_list = g_slist_append (sets_list, current_set);
-
+              if (!priv->photosets_fetched)
+                {
+                  current_set = frogr_photoset_new (current_data_set->id,
+                                                    current_data_set->title,
+                                                    current_data_set->description);
+                  frogr_photoset_set_primary_photo_id (current_set, current_data_set->primary_photo_id);
+                  frogr_photoset_set_n_photos (current_set, current_data_set->n_photos);
+
+                  sets_list = g_slist_append (sets_list, current_set);
+                }
               fsp_data_free (FSP_DATA (current_data_set));
             }
 
           g_slist_free (data_sets_list);
         }
-    }
 
-  /* Update main view's model */
-  model = frogr_main_view_get_model (priv->mainview);
-  frogr_model_set_remote_photosets (model, sets_list);
+      if (!priv->photosets_fetched)
+        {
+          FrogrModel *model = frogr_main_view_get_model (priv->mainview);
+          frogr_model_set_remote_photosets (model, sets_list);
+        }
+      priv->photosets_fetched = TRUE;
+    }
 
   priv->fetching_photosets = FALSE;
 }
@@ -1481,7 +1483,6 @@ _fetch_groups_cb (GObject *object, GAsyncResult *res, gpointer data)
   FspSession *session = NULL;
   FrogrController *controller = NULL;
   FrogrControllerPrivate *priv = NULL;
-  FrogrModel *model = NULL;
   GSList *data_groups_list = NULL;
   GSList *groups_list = NULL;
   GError *error = NULL;
@@ -1505,8 +1506,6 @@ _fetch_groups_cb (GObject *object, GAsyncResult *res, gpointer data)
     }
   else
     {
-      priv->groups_fetched = TRUE;
-
       if (data_groups_list)
         {
           GSList *item = NULL;
@@ -1515,23 +1514,28 @@ _fetch_groups_cb (GObject *object, GAsyncResult *res, gpointer data)
           for (item = data_groups_list; item; item = g_slist_next (item))
             {
               data_group = FSP_DATA_GROUP (item->data);
-              current_group = frogr_group_new (data_group->id,
-                                               data_group->name,
-                                               data_group->privacy,
-                                               data_group->n_photos);
-
-              groups_list = g_slist_append (groups_list, current_group);
-
+              if (!priv->groups_fetched)
+                {
+                  current_group = frogr_group_new (data_group->id,
+                                                   data_group->name,
+                                                   data_group->privacy,
+                                                   data_group->n_photos);
+
+                  groups_list = g_slist_append (groups_list, current_group);
+                }
               fsp_data_free (FSP_DATA (data_group));
             }
 
           g_slist_free (data_groups_list);
         }
-    }
 
-  /* Update main view's model */
-  model = frogr_main_view_get_model (priv->mainview);
-  frogr_model_set_groups (model, groups_list);
+      if (!priv->groups_fetched)
+        {
+          FrogrModel *model = frogr_main_view_get_model (priv->mainview);
+          frogr_model_set_groups (model, groups_list);
+        }
+      priv->groups_fetched = TRUE;
+    }
 
   priv->fetching_groups = FALSE;
 }
@@ -1705,7 +1709,6 @@ _fetch_tags_cb (GObject *object, GAsyncResult *res, gpointer data)
   FspSession *session = NULL;
   FrogrController *controller = NULL;
   FrogrControllerPrivate *priv = NULL;
-  FrogrModel *model = NULL;
   GSList *tags_list = NULL;
   GError *error = NULL;
 
@@ -1729,11 +1732,19 @@ _fetch_tags_cb (GObject *object, GAsyncResult *res, gpointer data)
       g_error_free (error);
     }
   else
-    priv->tags_fetched = TRUE;
-
-  /* Update main view's model */
-  model = frogr_main_view_get_model (priv->mainview);
-  frogr_model_set_remote_tags (model, tags_list);
+    {
+      if (priv->tags_fetched)
+        {
+          g_slist_foreach (tags_list, (GFunc)g_free, NULL);
+          g_slist_free (tags_list);
+        }
+      else
+        {
+          FrogrModel *model = frogr_main_view_get_model (priv->mainview);
+          frogr_model_set_remote_tags (model, tags_list);
+        }
+      priv->tags_fetched = TRUE;
+    }
 
   priv->fetching_tags = FALSE;
 }



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