[latexila/wip/templates-revamp: 1/2] Rewrite create_parent_directories() util function in C



commit 1562f62ff74e858f98ca29652b0b16233875a61b
Author: Sébastien Wilmet <swilmet gnome org>
Date:   Wed May 27 14:35:03 2015 +0200

    Rewrite create_parent_directories() util function in C
    
    It'll be used for the templates.

 docs/reference/latexila-sections.txt |    1 +
 src/liblatexila/latexila-utils.c     |   45 ++++++++++++++++++++++++++++++++++
 src/liblatexila/latexila-utils.h     |    2 +
 src/utils.vala                       |   23 +----------------
 4 files changed, 49 insertions(+), 22 deletions(-)
---
diff --git a/docs/reference/latexila-sections.txt b/docs/reference/latexila-sections.txt
index 8e8ad02..0d4a234 100644
--- a/docs/reference/latexila-sections.txt
+++ b/docs/reference/latexila-sections.txt
@@ -268,4 +268,5 @@ latexila_utils_file_query_exists_async
 latexila_utils_file_query_exists_finish
 latexila_utils_show_uri
 latexila_utils_get_dialog_component
+latexila_utils_create_parent_directories
 </SECTION>
diff --git a/src/liblatexila/latexila-utils.c b/src/liblatexila/latexila-utils.c
index 9dc4cc7..3fa241a 100644
--- a/src/liblatexila/latexila-utils.c
+++ b/src/liblatexila/latexila-utils.c
@@ -377,3 +377,48 @@ latexila_utils_get_dialog_component (const gchar *title,
   g_free (markup);
   return GTK_WIDGET (grid);
 }
+
+/**
+ * latexila_utils_create_parent_directories:
+ * @file: a file
+ *
+ * Synchronously creates parent directories of @file, so that @file can be
+ * saved.
+ *
+ * Returns: whether the directories are correctly created. %FALSE is returned on
+ * error.
+ */
+gboolean
+latexila_utils_create_parent_directories (GFile *file)
+{
+  GFile *parent;
+  GError *error = NULL;
+  gboolean ok = TRUE;
+
+  g_return_val_if_fail (G_IS_FILE (file), FALSE);
+
+  parent = g_file_get_parent (file);
+
+  if (parent == NULL)
+    return ok;
+
+  if (!g_file_make_directory_with_parents (parent, NULL, &error))
+    {
+      if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_EXISTS))
+        {
+          gchar *path = g_file_get_parse_name (file);
+
+          ok = FALSE;
+          g_warning ("Failed to create parent directories for the file '%s': %s",
+                     path,
+                     error->message);
+
+          g_free (path);
+        }
+
+      g_error_free (error);
+    }
+
+  g_object_unref (parent);
+  return ok;
+}
diff --git a/src/liblatexila/latexila-utils.h b/src/liblatexila/latexila-utils.h
index edac6df..d1f313e 100644
--- a/src/liblatexila/latexila-utils.h
+++ b/src/liblatexila/latexila-utils.h
@@ -55,6 +55,8 @@ void            latexila_utils_show_uri                         (GdkScreen    *s
 GtkWidget *     latexila_utils_get_dialog_component             (const gchar *title,
                                                                  GtkWidget   *widget);
 
+gboolean        latexila_utils_create_parent_directories        (GFile *file);
+
 G_END_DECLS
 
 #endif /* __LATEXILA_UTILS_H__ */
diff --git a/src/utils.vala b/src/utils.vala
index d26ad9a..0ad0fed 100644
--- a/src/utils.vala
+++ b/src/utils.vala
@@ -121,30 +121,9 @@ namespace Utils
         }
     }
 
-    public bool create_parent_directories (File file)
-    {
-        File parent = file.get_parent ();
-
-        if (parent == null || parent.query_exists ())
-            return true;
-
-        try
-        {
-            parent.make_directory_with_parents ();
-        }
-        catch (Error e)
-        {
-            warning ("Failed to create directory parents for the file '%s': %s",
-                file.get_parse_name (), e.message);
-            return false;
-        }
-
-        return true;
-    }
-
     public bool save_file (File file, string contents, bool make_backup = false)
     {
-        if (! create_parent_directories (file))
+        if (! Latexila.utils_create_parent_directories (file))
             return false;
 
         try


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