[frogr] Don't update project path if an error has happened



commit 385d7a9abfc46632eb12a1ec4ab3638de4832829
Author: Mario Sanchez Prada <msanchez gnome org>
Date:   Sun Dec 9 02:11:52 2012 +0100

    Don't update project path if an error has happened

 src/frogr-controller.c |   38 +++++++++++++++++++++++++++-----------
 src/frogr-controller.h |    4 ++--
 src/frogr-main-view.c  |   15 ++++++++-------
 3 files changed, 37 insertions(+), 20 deletions(-)
---
diff --git a/src/frogr-controller.c b/src/frogr-controller.c
index 4e336e7..bcaea60 100644
--- a/src/frogr-controller.c
+++ b/src/frogr-controller.c
@@ -2826,15 +2826,16 @@ frogr_controller_cancel_ongoing_requests (FrogrController *self)
   priv->cancellable = NULL;
 }
 
-void
+gboolean
 frogr_controller_open_project_from_file (FrogrController *self, const gchar *path)
 {
   FrogrControllerPrivate *priv = NULL;
   JsonParser *json_parser = NULL;
   GError *error = NULL;
+  gboolean result = FALSE;
 
-  g_return_if_fail(FROGR_IS_CONTROLLER (self));
-  g_return_if_fail(path);
+  g_return_val_if_fail(FROGR_IS_CONTROLLER (self), FALSE);
+  g_return_val_if_fail(path, FALSE);
 
   priv = FROGR_CONTROLLER_GET_PRIVATE (self);
 
@@ -2868,18 +2869,20 @@ 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);
-      root_node = json_parser_get_root (json_parser);
 
+      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);
+      result = TRUE;
     }
-
   g_object_unref (json_parser);
+
+  return result;
 }
 
-void
+gboolean
 frogr_controller_save_project_to_file (FrogrController *self, const gchar *path)
 {
   FrogrControllerPrivate *priv = NULL;
@@ -2888,19 +2891,27 @@ frogr_controller_save_project_to_file (FrogrController *self, const gchar *path)
   JsonNode *root_node = NULL;
   JsonObject *root_object = NULL;
   JsonObject *serialized_model = NULL;
+  gint n_pictures;
+  gint n_photosets;
+  gint n_groups;
   GError *error = NULL;
 
-  g_return_if_fail(FROGR_IS_CONTROLLER (self));
+  g_return_val_if_fail(FROGR_IS_CONTROLLER (self), FALSE);
+  g_return_val_if_fail(path, FALSE);
 
   priv = FROGR_CONTROLLER_GET_PRIVATE (self);
   model = frogr_main_view_get_model (priv->mainview);
 
+  n_pictures = frogr_model_n_pictures (model);
+  n_photosets = frogr_model_n_photosets (model);
+  n_groups = frogr_model_n_groups (model);
+
   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));
+  json_object_set_int_member (root_object, "n_pictures", n_pictures);
+  json_object_set_int_member (root_object, "n_photosets", n_photosets);
+  json_object_set_int_member (root_object, "n_groups", n_groups);
 
   serialized_model = frogr_model_serialize (model);
   json_object_set_object_member (root_object, "data", serialized_model);
@@ -2914,13 +2925,18 @@ frogr_controller_save_project_to_file (FrogrController *self, const gchar *path)
 
   /* Save to disk */
   json_generator_to_file (json_gen, path, &error);
+  g_object_unref (json_gen);
+
   if (error)
     {
       DEBUG ("Error serializing current state to %s: %s",
              path, error->message);
       g_error_free (error);
+
+      return FALSE;
     }
-  g_object_unref (json_gen);
+
+  return TRUE;
 }
 
 void
diff --git a/src/frogr-controller.h b/src/frogr-controller.h
index e265989..f2ba65f 100644
--- a/src/frogr-controller.h
+++ b/src/frogr-controller.h
@@ -123,9 +123,9 @@ void frogr_controller_reorder_pictures (FrogrController *self);
 
 void frogr_controller_cancel_ongoing_requests (FrogrController *self);
 
-void frogr_controller_open_project_from_file (FrogrController *self, const gchar *path);
+gboolean frogr_controller_open_project_from_file (FrogrController *self, const gchar *path);
 
-void frogr_controller_save_project_to_file (FrogrController *self, const gchar *path);
+gboolean frogr_controller_save_project_to_file (FrogrController *self, const gchar *path);
 
 void frogr_controller_set_use_dark_theme (FrogrController *self, gboolean value);
 
diff --git a/src/frogr-main-view.c b/src/frogr-main-view.c
index ae8f593..fb11407 100644
--- a/src/frogr-main-view.c
+++ b/src/frogr-main-view.c
@@ -1231,9 +1231,8 @@ _open_project_dialog_response_cb (GtkDialog *dialog,
           FrogrMainViewPrivate *priv = FROGR_MAIN_VIEW_GET_PRIVATE (self);
 
           /* Load from disk and update project's path */
-          frogr_controller_open_project_from_file (priv->controller, filename);
-          _update_project_path (self, filename);
-
+          if (frogr_controller_open_project_from_file (priv->controller, filename))
+            _update_project_path (self, filename);
           g_free (filename);
         }
     }
@@ -1287,11 +1286,13 @@ _save_project_to_file (FrogrMainView *self, const gchar *filepath)
   FrogrMainViewPrivate *priv = FROGR_MAIN_VIEW_GET_PRIVATE (self);
 
   /* Save to disk and update project's path */
-  frogr_controller_save_project_to_file (priv->controller, filepath);
-  _update_project_path (self, filepath);
+  if (frogr_controller_save_project_to_file (priv->controller, filepath))
+    {
+      _update_project_path (self, filepath);
 
-  /* Update title marking it as non-dirty (just saved) */
-  _update_window_title (self, FALSE);
+      /* Update title marking it as non-dirty (just saved) */
+      _update_window_title (self, FALSE);
+    }
 }
 
 static void



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