[Xfce4-commits] <midori:master> Introduce get_extension_config_dir/ _get_preset_filename

Christian Dywan noreply at xfce.org
Tue Dec 4 01:48:01 CET 2012


Updating branch refs/heads/master
         to b4aca14a6a24b8bd28eebf32035c6c2bac6d1bf1 (commit)
       from 61163fd14f4181f07b5139ab2988ec7eaaf8953f (commit)

commit b4aca14a6a24b8bd28eebf32035c6c2bac6d1bf1
Author: Christian Dywan <christian at twotoasts.de>
Date:   Tue Dec 4 01:45:13 2012 +0100

    Introduce get_extension_config_dir/ _get_preset_filename
    
    Handle extension filenames/ folders solely in Midori.Paths.

 katze/midori-paths.vala     |   31 +++++++++++++++++++++++++++++--
 midori/midori-extension.c   |   16 ++--------------
 midori/midori-platform.h    |    2 --
 midori/midori-privatedata.c |   13 +++++++------
 midori/midori.vapi          |    2 +-
 midori/wscript_build        |    2 +-
 tests/app.vala              |    3 +++
 7 files changed, 43 insertions(+), 26 deletions(-)

diff --git a/katze/midori-paths.vala b/katze/midori-paths.vala
index e88c0ac..fccf513 100644
--- a/katze/midori-paths.vala
+++ b/katze/midori-paths.vala
@@ -20,6 +20,8 @@ extern const string MDATADIR;
 extern const string PACKAGE_NAME;
 extern const string SYSCONFDIR;
 extern const string MIDORI_VERSION_SUFFIX;
+const string MODULE_PREFIX = "lib";
+const string MODULE_SUFFIX = "." + GLib.Module.SUFFIX;
 
 namespace Midori {
     public enum RuntimeMode {
@@ -124,8 +126,11 @@ namespace Midori {
             do {
                 string fn = path.substring (i, -1);
                 if (Posix.access (fn, Posix.F_OK) != 0) {
-                    if (DirUtils.create (fn, mode) == -1)
-                        return; /* Failed */
+                    if (DirUtils.create (fn, mode) == -1) {
+                        /* Slow fallback; if this fails we fail */
+                        DirUtils.create_with_parents (path, mode);
+                        return;
+                    }
                 }
                 else if (!FileUtils.test (fn, FileTest.IS_SYMLINK))
                     return; /* Failed */
@@ -157,6 +162,28 @@ namespace Midori {
             return config_dir;
         }
 
+        public static string get_extension_config_dir (string extension) {
+            assert (config_dir != null);
+            string folder;
+            if ("." in extension)
+                folder = Path.build_filename (config_dir, "extensions", extension);
+            else
+                folder = Path.build_filename (config_dir, "extensions",
+                    MODULE_PREFIX + extension + "." + GLib.Module.SUFFIX);
+            mkdir_with_parents (folder);
+            return folder;
+        }
+
+        public static string get_extension_preset_filename (string extension, string filename) {
+            assert (exec_path != null);
+            string preset_filename = extension;
+            if (extension.has_prefix (MODULE_PREFIX))
+                preset_filename = extension.split (MODULE_PREFIX)[1];
+            if (extension.has_suffix (MODULE_SUFFIX))
+                preset_filename = preset_filename.split (MODULE_SUFFIX)[0];
+            return get_preset_filename (Path.build_filename ("extensions", preset_filename), filename);
+        }
+
         /* returns the path to a user configuration file to which it is permitted to write.
         this is also necessary for files whose state is synchronized to disk by a manager,
         e.g. cookies. */
diff --git a/midori/midori-extension.c b/midori/midori-extension.c
index 8c2c7b5..2db6a55 100644
--- a/midori/midori-extension.c
+++ b/midori/midori-extension.c
@@ -332,19 +332,8 @@ midori_extension_activate_cb (MidoriExtension* extension,
             if (error->code == G_FILE_ERROR_NOENT)
             {
                 gchar* filename = g_object_get_data (G_OBJECT (extension), "filename");
-                gchar* folder;
-                if (g_str_has_prefix (filename, MIDORI_MODULE_PREFIX))
-                    filename = &filename[strlen (MIDORI_MODULE_PREFIX)];
-                if (g_str_has_suffix (filename, G_MODULE_SUFFIX))
-                    filename = g_strndup (filename,
-                        strlen (filename) - strlen ("." G_MODULE_SUFFIX));
-                else
-                    filename = g_strdup (filename);
-                folder = g_build_filename ("extensions", filename, NULL);
-                g_free (filename);
                 katze_assign (config_file,
-                    midori_paths_get_preset_filename (folder, "config"));
-                g_free (folder);
+                    midori_paths_get_extension_preset_filename (filename, "config"));
                 g_key_file_load_from_file (extension->priv->key_file, config_file,
                                            G_KEY_FILE_KEEP_COMMENTS, NULL);
             }
@@ -812,8 +801,7 @@ midori_extension_get_config_dir (MidoriExtension* extension)
     {
         gchar* filename = g_object_get_data (G_OBJECT (extension), "filename");
         if (filename != NULL)
-            extension->priv->config_dir = g_build_filename (
-                midori_paths_get_config_dir_for_writing (), "extensions", filename, NULL);
+            extension->priv->config_dir = midori_paths_get_extension_config_dir (filename);
         else
             extension->priv->config_dir = NULL;
     }
diff --git a/midori/midori-platform.h b/midori/midori-platform.h
index b74339a..dfce79f 100644
--- a/midori/midori-platform.h
+++ b/midori/midori-platform.h
@@ -38,6 +38,4 @@
        && MIDORI_MOD_NEW_TAB(((GdkEventButton*)evt)->state)) \
      || (((GdkEventButton*)evt)->button == 2)))
 
-#define MIDORI_MODULE_PREFIX "lib"
-
 #endif /* !__MIDORI_PLATFORM_H__ */
diff --git a/midori/midori-privatedata.c b/midori/midori-privatedata.c
index 40f4f83..48504cd 100644
--- a/midori/midori-privatedata.c
+++ b/midori/midori-privatedata.c
@@ -263,17 +263,18 @@ static void
 midori_clear_saved_logins_cb (void)
 {
     sqlite3* db;
-    gchar* path = g_build_filename (midori_paths_get_config_dir_for_writing (), "logins", NULL);
-    g_unlink (path);
+    gchar* filename = midori_paths_get_config_filename_for_writing ("logins");
+    g_unlink (filename);
     /* Form History database, written by the extension */
-    katze_assign (path, g_build_filename (midori_paths_get_config_dir_for_writing (),
-        "extensions", MIDORI_MODULE_PREFIX "formhistory." G_MODULE_SUFFIX, "forms.db", NULL));
-    if (sqlite3_open (path, &db) == SQLITE_OK)
+    gchar* path = midori_paths_get_extension_config_dir ("formhistory");
+    katze_assign (filename, g_build_filename (path, "forms.db", NULL));
+    g_free (path);
+    if (sqlite3_open (filename, &db) == SQLITE_OK)
     {
         sqlite3_exec (db, "DELETE FROM forms", NULL, NULL, NULL);
         sqlite3_close (db);
     }
-    g_free (path);
+    g_free (filename);
 }
 
 #if WEBKIT_CHECK_VERSION (1, 3, 11)
diff --git a/midori/midori.vapi b/midori/midori.vapi
index 8b63637..fd4ced7 100644
--- a/midori/midori.vapi
+++ b/midori/midori.vapi
@@ -207,7 +207,7 @@ namespace Midori {
         PENDING_UNDELAY,
     }
 
-    public class WebSettings : WebKit.WebSettings {
+    public class WebSettings : Midori.Settings {
         public WebSettings ();
         [NoAccessorMethod]
         public MidoriStartup load_on_startup { get; set; }
diff --git a/midori/wscript_build b/midori/wscript_build
index 17c7c4e..179161a 100644
--- a/midori/wscript_build
+++ b/midori/wscript_build
@@ -26,7 +26,7 @@ if progressive:
     obj.add_marshal_file ('marshal.list', 'midori_cclosure_marshal')
     obj.install_path = None
     obj.vapi_dirs = '../midori ../katze'
-    obj.packages = 'glib-2.0 gio-2.0 libsoup-2.4 webkitgtk-3.0 posix sqlite3'
+    obj.packages = 'glib-2.0 gmodule-2.0 gio-2.0 libsoup-2.4 webkitgtk-3.0 posix sqlite3'
     if bld.env['HAVE_GTK3']:
         obj.packages += ' gtk+-3.0'
     else:
diff --git a/tests/app.vala b/tests/app.vala
index 4c633c1..cfb747f 100644
--- a/tests/app.vala
+++ b/tests/app.vala
@@ -19,6 +19,9 @@ void app_normal () {
     var loop = MainContext.default ();
     do { loop.iteration (true); } while (loop.pending ());
     Midori.normal_app_on_quit (app);
+
+    string filename = Midori.Paths.get_extension_config_dir ("adblock");
+    assert (Posix.access (filename, Posix.F_OK) == 0);
 }
 
 void app_custom_config () {


More information about the Xfce4-commits mailing list