[frogr] Make the ID and the local ID two different concepts for sets



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

    Make the ID and the local ID two different concepts for sets

 src/frogr-controller.c            |    8 ++--
 src/frogr-create-new-set-dialog.c |    2 +-
 src/frogr-photoset.c              |   91 ++++++++++++++++++++++++++-----------
 src/frogr-photoset.h              |   15 ++++--
 4 files changed, 80 insertions(+), 36 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 561dd62..87bb970 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -1010,7 +1010,7 @@ _add_picture_to_photosets_or_create (FrogrController *self, UploadOnePictureData
   uop_data->after_upload_attempts[AFTER_UPLOAD_OP_ADDING_TO_SET] = 0;
 
   set = FROGR_PHOTOSET (uop_data->photosets->data);
-  if (frogr_photoset_is_local_only (set))
+  if (frogr_photoset_is_local (set))
     _create_photoset_for_picture (self, uop_data);
   else
     _add_picture_to_photoset (self, uop_data);
@@ -1427,9 +1427,9 @@ _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_with_id (current_data_set->id,
-                                                        current_data_set->title,
-                                                        current_data_set->description);
+              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);
 
diff --git a/src/frogr-create-new-set-dialog.c b/src/frogr-create-new-set-dialog.c
index 7b189e9..a6f6fad 100644
--- a/src/frogr-create-new-set-dialog.c
+++ b/src/frogr-create-new-set-dialog.c
@@ -183,7 +183,7 @@ _update_model (FrogrCreateNewSetDialog *self,
   mainview_model = frogr_main_view_get_model (mainview);
 
   /* Add the set to the model */
-  new_set = frogr_photoset_new (title, description);
+  new_set = frogr_photoset_new_local (title, description);
   frogr_main_view_model_add_local_photoset (mainview_model, new_set);
 
   /* Add the set to the list of sets for each picture */
diff --git a/src/frogr-photoset.c b/src/frogr-photoset.c
index b0cea8c..122a36a 100644
--- a/src/frogr-photoset.c
+++ b/src/frogr-photoset.c
@@ -25,8 +25,6 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#define TEMPORARY_ID_PREFIX "localset_"
-
 #define FROGR_PHOTOSET_GET_PRIVATE(object)              \
   (G_TYPE_INSTANCE_GET_PRIVATE ((object),               \
                                 FROGR_TYPE_PHOTOSET,    \
@@ -41,6 +39,7 @@ struct _FrogrPhotoSetPrivate
   gchar *title;
   gchar *description;
   gchar *id;
+  gchar *local_id; /* For locally created sets only */
   gchar *primary_photo_id;
   gint n_photos;
 };
@@ -51,6 +50,7 @@ enum  {
   PROP_TITLE,
   PROP_DESCRIPTION,
   PROP_ID,
+  PROP_LOCAL_ID,
   PROP_PRIMARY_PHOTO_ID,
   PROP_N_PHOTOS
 };
@@ -91,8 +91,7 @@ _create_temporary_id_for_photoset (void)
 
   /* The letters may increase uniqueness by preventing "melds"
      i.e. 01t01k01 and 0101t0k1 are not the same */
-  key = g_strdup_printf("%s%ut%uut%uu%up%ur%uk%u",
-                        TEMPORARY_ID_PREFIX,
+  key = g_strdup_printf("%ut%uut%uu%up%ur%uk%u",
                         /* Duplicate keys must be generated
                            by two different program instances */
                         serial,
@@ -137,6 +136,9 @@ _frogr_photoset_set_property (GObject *object,
     case PROP_ID:
       frogr_photoset_set_id (self, g_value_get_string (value));
       break;
+    case PROP_LOCAL_ID:
+      frogr_photoset_set_local_id (self, g_value_get_string (value));
+      break;
     case PROP_PRIMARY_PHOTO_ID:
       frogr_photoset_set_primary_photo_id (self, g_value_get_string (value));
       break;
@@ -168,6 +170,9 @@ _frogr_photoset_get_property (GObject *object,
     case PROP_ID:
       g_value_set_string (value, frogr_photoset_get_id (self));
       break;
+    case PROP_LOCAL_ID:
+      g_value_set_string (value, frogr_photoset_get_local_id (self));
+      break;
     case PROP_PRIMARY_PHOTO_ID:
       g_value_set_string (value, frogr_photoset_get_primary_photo_id (self));
       break;
@@ -189,6 +194,7 @@ _frogr_photoset_finalize (GObject* object)
   g_free (priv->title);
   g_free (priv->description);
   g_free (priv->id);
+  g_free (priv->local_id);
   g_free (priv->primary_photo_id);
 
   /* call super class */
@@ -227,7 +233,14 @@ frogr_photoset_class_init(FrogrPhotoSetClass *klass)
                                                         "Photoset ID from flickr",
                                                         NULL,
                                                         G_PARAM_READWRITE));
-
+  g_object_class_install_property (obj_class,
+                                   PROP_LOCAL_ID,
+                                   g_param_spec_string ("local-id",
+                                                        "local-id",
+                                                        "Photoset ID locally generated"
+                                                        "(for new sets only)",
+                                                        NULL,
+                                                        G_PARAM_READWRITE));
   g_object_class_install_property (obj_class,
                                    PROP_PRIMARY_PHOTO_ID,
                                    g_param_spec_string ("primary-photo-id",
@@ -259,6 +272,7 @@ frogr_photoset_init (FrogrPhotoSet *self)
   priv->title = NULL;
   priv->description = NULL;
   priv->id = NULL;
+  priv->local_id = NULL;
   priv->primary_photo_id = NULL;
   priv->n_photos = 0;
 }
@@ -267,37 +281,38 @@ frogr_photoset_init (FrogrPhotoSet *self)
 /* Public API */
 
 FrogrPhotoSet *
-frogr_photoset_new (const gchar *title,
+frogr_photoset_new (const gchar *id,
+                    const gchar *title,
                     const gchar *description)
 {
-  FrogrPhotoSet *new_set;
-  gchar *id;
-
   g_return_val_if_fail (title, NULL);
   g_return_val_if_fail (description, NULL);
 
-  /* We always need to have an id (locally created photosets) */
-  id = _create_temporary_id_for_photoset ();
-  new_set = frogr_photoset_new_with_id (id, title, description);
-  g_free (id);
-
-  return new_set;
+  return FROGR_PHOTOSET (g_object_new(FROGR_TYPE_PHOTOSET,
+                                      "id", id,
+                                      "title", title,
+                                      "description", description,
+                                      NULL));
 }
 
 FrogrPhotoSet *
-frogr_photoset_new_with_id (const gchar *id,
-                            const gchar *title,
-                            const gchar *description)
+frogr_photoset_new_local (const gchar *title,
+                          const gchar *description)
 {
-  g_return_val_if_fail (id, NULL);
+  FrogrPhotoSet *new_set;
+  gchar *id;
+
   g_return_val_if_fail (title, NULL);
   g_return_val_if_fail (description, NULL);
 
-  return FROGR_PHOTOSET (g_object_new(FROGR_TYPE_PHOTOSET,
-                                      "id", id,
-                                      "title", title,
-                                      "description", description,
-                                      NULL));
+  new_set = frogr_photoset_new (NULL, title, description);
+
+  /* We always need to have an id in locally created photosets */
+  id = _create_temporary_id_for_photoset ();
+  frogr_photoset_set_local_id (new_set, id);
+  g_free (id);
+
+  return new_set;
 }
 
 /* Data Managing functions */
@@ -376,6 +391,30 @@ frogr_photoset_set_id (FrogrPhotoSet *self,
 }
 
 const gchar *
+frogr_photoset_get_local_id (FrogrPhotoSet *self)
+{
+  FrogrPhotoSetPrivate *priv = NULL;
+
+  g_return_val_if_fail(FROGR_IS_PHOTOSET(self), NULL);
+
+  priv = FROGR_PHOTOSET_GET_PRIVATE (self);
+  return (const gchar *)priv->local_id;
+}
+
+void
+frogr_photoset_set_local_id (FrogrPhotoSet *self,
+                             const gchar *id)
+{
+  FrogrPhotoSetPrivate *priv = NULL;
+
+  g_return_if_fail(FROGR_IS_PHOTOSET(self));
+
+  priv = FROGR_PHOTOSET_GET_PRIVATE (self);
+  g_free (priv->local_id);
+  priv->local_id = g_strdup (id);
+}
+
+const gchar *
 frogr_photoset_get_primary_photo_id (FrogrPhotoSet *self)
 {
   FrogrPhotoSetPrivate *priv = NULL;
@@ -423,12 +462,12 @@ frogr_photoset_set_n_photos (FrogrPhotoSet *self,
 }
 
 gboolean
-frogr_photoset_is_local_only (FrogrPhotoSet *self)
+frogr_photoset_is_local (FrogrPhotoSet *self)
 {
   FrogrPhotoSetPrivate *priv = NULL;
 
   g_return_val_if_fail(FROGR_IS_PHOTOSET(self), FALSE);
 
   priv = FROGR_PHOTOSET_GET_PRIVATE (self);
-  return g_str_has_prefix (priv->id, TEMPORARY_ID_PREFIX);
+  return priv->id == NULL && priv->local_id != NULL;
 }
diff --git a/src/frogr-photoset.h b/src/frogr-photoset.h
index f67f96a..dc3dd14 100644
--- a/src/frogr-photoset.h
+++ b/src/frogr-photoset.h
@@ -50,18 +50,23 @@ struct _FrogrPhotoSetClass
 GType frogr_photoset_get_type(void) G_GNUC_CONST;
 
 /* Constructors */
-FrogrPhotoSet *frogr_photoset_new (const gchar *title,
+
+FrogrPhotoSet *frogr_photoset_new (const gchar *id,
+                                   const gchar *title,
                                    const gchar *description);
 
-FrogrPhotoSet *frogr_photoset_new_with_id (const gchar *id,
-                                           const gchar *title,
-                                           const gchar *description);
+FrogrPhotoSet *frogr_photoset_new_local (const gchar *title,
+                                         const gchar *description);
 /* Data managing methods */
 
 const gchar *frogr_photoset_get_id (FrogrPhotoSet *self);
 void frogr_photoset_set_id (FrogrPhotoSet *self,
                             const gchar *id);
 
+const gchar *frogr_photoset_get_local_id (FrogrPhotoSet *self);
+void frogr_photoset_set_local_id (FrogrPhotoSet *self,
+                                  const gchar *id);
+
 const gchar *frogr_photoset_get_title (FrogrPhotoSet *self);
 void frogr_photoset_set_title (FrogrPhotoSet *self,
                                const gchar *title);
@@ -78,7 +83,7 @@ gint frogr_photoset_get_n_photos (FrogrPhotoSet *self);
 void frogr_photoset_set_n_photos (FrogrPhotoSet *self,
                                   gint n);
 
-gboolean frogr_photoset_is_local_only (FrogrPhotoSet *self);
+gboolean frogr_photoset_is_local (FrogrPhotoSet *self);
 
 G_END_DECLS
 



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