[frogr] Remove FrogrSerializer and distribute its responsibility between the model and the controller
- From: Mario Sanchez Prada <msanchez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [frogr] Remove FrogrSerializer and distribute its responsibility between the model and the controller
- Date: Sun, 11 Nov 2012 00:07:28 +0000 (UTC)
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]