[frogr] Save some additional information in project files



commit 7e0cb57cf6e020886f7e0d47307b44ae991661b7
Author: Mario Sanchez Prada <msanchez gnome org>
Date:   Sun Dec 9 01:43:12 2012 +0100

    Save some additional information in project files

 src/frogr-controller.c |   30 ++++++++++++++++++++++++------
 src/frogr-model.c      |   13 +++----------
 src/frogr-model.h      |    4 ++--
 3 files changed, 29 insertions(+), 18 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 2011b12..6f57cfd 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -2848,7 +2848,9 @@ frogr_controller_open_project_from_file (FrogrController *self, const gchar *pat
     {
       FrogrControllerPrivate *priv = NULL;
       FrogrModel *model = NULL;
-      JsonNode *json_root = NULL;
+      JsonNode *root_node = NULL;
+      JsonObject *root_object = NULL;
+      JsonObject *data_object = NULL;
 
       /* Make sure we are not fetching any data from the network at
          this moment, or cancel otherwise, so the model is ready */
@@ -2860,8 +2862,12 @@ frogr_controller_open_project_from_file (FrogrController *self, const gchar *pat
       _set_state (self, FROGR_STATE_LOADING_PICTURES);
 
       model = frogr_main_view_get_model (priv->mainview);
-      json_root = json_parser_get_root (json_parser);
-      frogr_model_deserialize (model, json_root);
+      root_node = json_parser_get_root (json_parser);
+
+      root_object = json_node_get_object (root_node);
+      data_object = json_object_get_object_member (root_object, "data");
+
+      frogr_model_deserialize (model, data_object);
     }
 
   g_object_unref (json_parser);
@@ -2873,7 +2879,9 @@ frogr_controller_save_project_to_file (FrogrController *self, const gchar *path)
   FrogrControllerPrivate *priv = NULL;
   FrogrModel *model = NULL;
   JsonGenerator *json_gen = NULL;
-  JsonNode *serialized_model = NULL;
+  JsonNode *root_node = NULL;
+  JsonObject *root_object = NULL;
+  JsonObject *serialized_model = NULL;
   GError *error = NULL;
 
   g_return_if_fail(FROGR_IS_CONTROLLER (self));
@@ -2881,12 +2889,22 @@ frogr_controller_save_project_to_file (FrogrController *self, const gchar *path)
   priv = FROGR_CONTROLLER_GET_PRIVATE (self);
   model = frogr_main_view_get_model (priv->mainview);
 
+  root_node = json_node_new (JSON_NODE_OBJECT);
+  root_object = json_object_new ();
+  json_object_set_string_member (root_object, "frogr-version", APP_VERSION);
+  json_object_set_int_member (root_object, "n_pictures", frogr_model_n_pictures (model));
+  json_object_set_int_member (root_object, "n_photosets", frogr_model_n_photosets (model));
+  json_object_set_int_member (root_object, "n_groups", frogr_model_n_groups (model));
+
   serialized_model = frogr_model_serialize (model);
+  json_object_set_object_member (root_object, "data", serialized_model);
+  json_node_set_object (root_node, root_object);
+  json_object_unref (root_object);
 
   /* 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);
+  json_generator_set_root (json_gen, root_node);
+  json_node_free (root_node);
 
   /* Save to disk */
   json_generator_to_file (json_gen, path, &error);
diff --git a/src/frogr-model.c b/src/frogr-model.c
index 98ad1cd..f15faf5 100644
--- a/src/frogr-model.c
+++ b/src/frogr-model.c
@@ -776,11 +776,10 @@ frogr_model_get_tags (FrogrModel *self)
   return priv->all_tags;
 }
 
-JsonNode *
+JsonObject *
 frogr_model_serialize (FrogrModel *self)
 {
   JsonArray *json_array = NULL;
-  JsonNode *root_node = NULL;
   JsonObject *root_object = NULL;
   GSList *data_list = NULL;
 
@@ -804,16 +803,12 @@ frogr_model_serialize (FrogrModel *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;
+  return root_object;
 }
 
 void
-frogr_model_deserialize (FrogrModel *self, JsonNode *json_node)
+frogr_model_deserialize (FrogrModel *self, JsonObject *root_object)
 {
-  JsonObject *root_object = NULL;
   JsonArray *array_member = NULL;
   GSList *pictures = NULL;
   GSList *sets = NULL;
@@ -823,8 +818,6 @@ frogr_model_deserialize (FrogrModel *self, JsonNode *json_node)
   g_return_if_fail(FROGR_IS_MODEL (self));
 
   /* First we get the different lists with data for sets, groups and tags */
-  root_object = json_node_get_object (json_node);
-
   array_member = json_object_get_array_member (root_object, "photosets");
   if (array_member)
     sets = _deserialize_list_from_json_array (array_member, FROGR_TYPE_PHOTOSET);
diff --git a/src/frogr-model.h b/src/frogr-model.h
index 6ed5e6d..b12d898 100644
--- a/src/frogr-model.h
+++ b/src/frogr-model.h
@@ -109,9 +109,9 @@ GSList *frogr_model_get_tags (FrogrModel *self);
 
 /* Serialization */
 
-JsonNode *frogr_model_serialize (FrogrModel *self);
+JsonObject *frogr_model_serialize (FrogrModel *self);
 
-void frogr_model_deserialize (FrogrModel *self, JsonNode *json_node);
+void frogr_model_deserialize (FrogrModel *self, JsonObject *root_object);
 
 G_END_DECLS
 



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