[frogr] Remove FrogrSerializer and distribute its responsibility between the model and the controller



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

    Remove FrogrSerializer and distribute its responsibility between the model and the controller

 src/Makefile.am             |    2 -
 src/frogr-controller.c      |   39 ++++----
 src/frogr-main-view-model.c |   66 +++++++++++++
 src/frogr-main-view-model.h |    7 ++
 src/frogr-serializer.c      |  226 -------------------------------------------
 src/frogr-serializer.h      |   72 --------------
 6 files changed, 92 insertions(+), 320 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 7d61d00..e009941 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -81,8 +81,6 @@ frogr_SOURCES = \
 	frogr-photoset.h \
 	frogr-picture.c \
 	frogr-picture.h \
-	frogr-serializer.c \
-	frogr-serializer.h \
 	frogr-settings-dialog.c \
 	frogr-settings-dialog.h \
 	frogr-util.c \
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 87bb970..6c91cd9 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -32,7 +32,6 @@
 #include "frogr-file-loader.h"
 #include "frogr-global-defs.h"
 #include "frogr-main-view.h"
-#include "frogr-serializer.h"
 #include "frogr-settings-dialog.h"
 #include "frogr-util.h"
 
@@ -40,6 +39,7 @@
 #include <flicksoup/flicksoup.h>
 #include <glib/gi18n.h>
 #include <gtk/gtk.h>
+#include <json-glib/json-glib.h>
 #include <string.h>
 
 #define API_KEY "18861766601de84f0921ce6be729f925"
@@ -66,7 +66,6 @@ struct _FrogrControllerPrivate
 
   FrogrMainView *mainview;
   FrogrConfig *config;
-  FrogrSerializer *serializer;
   FrogrAccount *account;
 
   FspSession *session;
@@ -2002,12 +2001,6 @@ _frogr_controller_dispose (GObject* object)
       priv->config = NULL;
     }
 
-  if (priv->serializer)
-    {
-      g_object_unref (priv->serializer);
-      priv->serializer = NULL;
-    }
-
   if (priv->account)
     {
       g_object_unref (priv->account);
@@ -2076,9 +2069,6 @@ frogr_controller_init (FrogrController *self)
   priv->config = frogr_config_get_instance ();
   g_object_ref (priv->config);
 
-  priv->serializer = frogr_serializer_get_instance ();
-  g_object_ref (priv->serializer);
-
   priv->session = fsp_session_new (API_KEY, SHARED_SECRET, NULL);
   priv->cancellable = NULL;
   priv->app_running = FALSE;
@@ -2739,22 +2729,31 @@ frogr_controller_save_session_to_file (FrogrController *self, const gchar *path)
 {
   FrogrControllerPrivate *priv = NULL;
   FrogrMainViewModel *mainview_model = NULL;
-  GSList *pictures = NULL;
-  GSList *photosets = NULL;
-  GSList *groups = NULL;
+  JsonGenerator *json_gen = NULL;
+  JsonNode *serialized_model = NULL;
+  GError *error = NULL;
 
   g_return_if_fail(FROGR_IS_CONTROLLER (self));
 
   priv = FROGR_CONTROLLER_GET_PRIVATE (self);
   mainview_model = frogr_main_view_get_model (priv->mainview);
 
-  pictures = frogr_main_view_model_get_pictures_as_loaded (mainview_model);
-  photosets = frogr_main_view_model_get_photosets (mainview_model);
-  groups = frogr_main_view_model_get_groups (mainview_model);
+  serialized_model = frogr_main_view_model_serialize (mainview_model);
+
+  /* Create a JsonGenerator using the JsonNode as root */
+  json_gen = json_generator_new ();
+  json_generator_set_root (json_gen, serialized_model);
+  json_node_free (serialized_model);
 
-  frogr_serializer_save_session_to_file (priv->serializer,
-                                         pictures, photosets, groups,
-                                         path);
+  /* Save to disk */
+  json_generator_to_file (json_gen, path, &error);
+  if (error)
+    {
+      DEBUG ("Error serializing current state to %s: %s",
+             path, error->message);
+      g_error_free (error);
+    }
+  g_object_unref (json_gen);
 }
 
 #ifdef GTK_API_VERSION_3
diff --git a/src/frogr-main-view-model.c b/src/frogr-main-view-model.c
index f77d204..fc223e3 100644
--- a/src/frogr-main-view-model.c
+++ b/src/frogr-main-view-model.c
@@ -135,6 +135,32 @@ _compare_photosets (FrogrPhotoSet *photoset1, FrogrPhotoSet *photoset2)
   return g_strcmp0 (frogr_photoset_get_id (photoset1), frogr_photoset_get_id (photoset2));
 }
 
+static JsonArray *
+serialize_list_to_json_array (GSList *list, GType g_type)
+{
+  JsonArray *json_array = NULL;
+  JsonNode *json_node = NULL;
+  GSList *item = NULL;
+
+  /* Generate a JsonArray with contents */
+  json_array = json_array_new ();
+  for (item = list; item; item = g_slist_next (item))
+    {
+      if (g_type == G_TYPE_OBJECT)
+        json_node = json_gobject_serialize (G_OBJECT (item->data));
+      else if (g_type == G_TYPE_STRING)
+        {
+          json_node = json_node_new (JSON_NODE_VALUE);
+          json_node_set_string (json_node, (const gchar*)item->data);
+        }
+
+      if (json_node)
+        json_array_add_element (json_array, json_node);
+    }
+
+  return json_array;
+}
+
 static void
 _frogr_main_view_model_dispose (GObject* object)
 {
@@ -640,3 +666,43 @@ frogr_main_view_model_get_tags (FrogrMainViewModel *self)
 
   return priv->all_tags;
 }
+
+JsonNode *
+frogr_main_view_model_serialize (FrogrMainViewModel *self)
+{
+  JsonArray *json_array = NULL;
+  JsonNode *root_node = NULL;
+  JsonObject *root_object = NULL;
+  GSList *data_list = NULL;
+
+  g_return_val_if_fail(FROGR_IS_MAIN_VIEW_MODEL (self), NULL);
+
+  root_object = json_object_new ();
+
+  data_list = frogr_main_view_model_get_pictures (self);
+  json_array = serialize_list_to_json_array (data_list, G_TYPE_OBJECT);
+  json_object_set_array_member (root_object, "pictures", json_array);
+
+  data_list = frogr_main_view_model_get_photosets (self);
+  json_array = serialize_list_to_json_array (data_list, G_TYPE_OBJECT);
+  json_object_set_array_member (root_object, "photosets", json_array);
+
+  data_list = frogr_main_view_model_get_groups (self);
+  json_array = serialize_list_to_json_array (data_list, G_TYPE_OBJECT);
+  json_object_set_array_member (root_object, "groups", json_array);
+
+  data_list = frogr_main_view_model_get_tags (self);
+  json_array = serialize_list_to_json_array (data_list, G_TYPE_STRING);
+  json_object_set_array_member (root_object, "tags", json_array);
+
+  root_node = json_node_new (JSON_NODE_OBJECT);
+  json_node_set_object (root_node, root_object);
+
+  return root_node;
+}
+
+void
+frogr_main_view_model_deserialize (FrogrMainViewModel *self, JsonNode *json_node)
+{
+  /* TODO */
+}
diff --git a/src/frogr-main-view-model.h b/src/frogr-main-view-model.h
index 7fe1561..6aa1a28 100644
--- a/src/frogr-main-view-model.h
+++ b/src/frogr-main-view-model.h
@@ -27,6 +27,7 @@
 
 #include <glib.h>
 #include <glib-object.h>
+#include <json-glib/json-glib.h>
 
 G_BEGIN_DECLS
 
@@ -110,6 +111,12 @@ void frogr_main_view_model_add_local_tags_from_string (FrogrMainViewModel *self,
 
 GSList *frogr_main_view_model_get_tags (FrogrMainViewModel *self);
 
+/* Serialization */
+
+JsonNode *frogr_main_view_model_serialize (FrogrMainViewModel *self);
+
+void frogr_main_view_model_deserialize (FrogrMainViewModel *self, JsonNode *json_node);
+
 G_END_DECLS
 
 #endif



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