summaryrefslogtreecommitdiff
path: root/src/config/GSettingsEngine.vala
diff options
context:
space:
mode:
Diffstat (limited to 'src/config/GSettingsEngine.vala')
-rw-r--r--src/config/GSettingsEngine.vala88
1 files changed, 81 insertions, 7 deletions
diff --git a/src/config/GSettingsEngine.vala b/src/config/GSettingsEngine.vala
index d35eb93..d4d95c6 100644
--- a/src/config/GSettingsEngine.vala
+++ b/src/config/GSettingsEngine.vala
@@ -5,7 +5,7 @@
*/
public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
- private const string ROOT_SCHEMA_NAME = "org.yorba.shotwell";
+ private const string ROOT_SCHEMA_NAME = "org.gnome.shotwell";
private const string PREFS_SCHEMA_NAME = ROOT_SCHEMA_NAME + ".preferences";
private const string UI_PREFS_SCHEMA_NAME = PREFS_SCHEMA_NAME + ".ui";
private const string SLIDESHOW_PREFS_SCHEMA_NAME = PREFS_SCHEMA_NAME + ".slideshow";
@@ -25,8 +25,11 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
private string[] schema_names;
private string[] key_names;
private Gee.HashMap<string, Settings> settings_cache = new Gee.HashMap<string, Settings>();
-
- public GSettingsConfigurationEngine() {
+
+ private string profile = "";
+
+ public GSettingsConfigurationEngine(string? profile) {
+ this.profile = profile == null ? "" : profile;
schema_names = new string[ConfigurableProperty.NUM_PROPERTIES];
schema_names[ConfigurableProperty.AUTO_IMPORT_FROM_LIBRARY] = FILES_PREFS_SCHEMA_NAME;
@@ -47,6 +50,7 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
schema_names[ConfigurableProperty.DISPLAY_EXTENDED_PROPERTIES] = UI_PREFS_SCHEMA_NAME;
schema_names[ConfigurableProperty.DISPLAY_SIDEBAR] = UI_PREFS_SCHEMA_NAME;
schema_names[ConfigurableProperty.DISPLAY_TOOLBAR] = UI_PREFS_SCHEMA_NAME;
+ schema_names[ConfigurableProperty.DISPLAY_MAP_WIDGET] = UI_PREFS_SCHEMA_NAME;
schema_names[ConfigurableProperty.DISPLAY_SEARCH_BAR] = UI_PREFS_SCHEMA_NAME;
schema_names[ConfigurableProperty.DISPLAY_PHOTO_RATINGS] = UI_PREFS_SCHEMA_NAME;
schema_names[ConfigurableProperty.DISPLAY_PHOTO_TAGS] = UI_PREFS_SCHEMA_NAME;
@@ -120,6 +124,7 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
key_names[ConfigurableProperty.DISPLAY_EXTENDED_PROPERTIES] = "display-extended-properties";
key_names[ConfigurableProperty.DISPLAY_SIDEBAR] = "display-sidebar";
key_names[ConfigurableProperty.DISPLAY_TOOLBAR] = "display-toolbar";
+ key_names[ConfigurableProperty.DISPLAY_MAP_WIDGET] = "display-map-widget";
key_names[ConfigurableProperty.DISPLAY_SEARCH_BAR] = "display-search-bar";
key_names[ConfigurableProperty.DISPLAY_PHOTO_RATINGS] = "display-photo-ratings";
key_names[ConfigurableProperty.DISPLAY_PHOTO_TAGS] = "display-photo-tags";
@@ -176,7 +181,14 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
private Settings get_settings(string schema) {
if (!this.settings_cache.has_key(schema)) {
- this.settings_cache[schema] = new Settings(schema);
+ if (schema.has_prefix (ROOT_SCHEMA_NAME)) {
+ var path = schema.replace(ROOT_SCHEMA_NAME, "");
+ path = "/org/gnome/shotwell/%s%s/".printf(profile == "" ? "" : "profiles/" + profile, path.replace(".", "/"));
+ path = path.replace("//", "/");
+ this.settings_cache[schema] = new Settings.with_path (schema, path);
+ } else {
+ this.settings_cache[schema] = new Settings(schema);
+ }
}
return this.settings_cache[schema];
@@ -229,7 +241,9 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
Settings schema_object = get_settings(schema);
- return schema_object.get_int(key);
+ var v = schema_object.get_int(key);
+
+ return v;
}
private void set_gs_int(string schema, string key, int value) throws ConfigurationError {
@@ -292,7 +306,7 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
if (cleaned_id == null)
cleaned_id = "default";
- cleaned_id = cleaned_id.replace("org.yorba.shotwell.", "");
+ cleaned_id = cleaned_id.replace("org.gnome.shotwell.", "");
cleaned_id = cleaned_id.replace(".", "-");
return cleaned_id;
@@ -304,7 +318,7 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
cleaned_id = "default";
cleaned_id = cleaned_id.replace(".", "-");
- return "org.yorba.shotwell.%s.%s".printf(domain, cleaned_id);
+ return "org.gnome.shotwell.%s.%s".printf(domain, cleaned_id);
}
private static string make_gsettings_key(string gconf_key) {
@@ -513,4 +527,64 @@ public class GSettingsConfigurationEngine : ConfigurationEngine, GLib.Object {
}
}
+ /*! @brief Migrates settings data over from old-style /org/yorba/ paths to /org/gnome/ ones.
+ * Should only be called ONCE, during DB upgrading; otherwise, stale data may be copied
+ * over newer data by accident.
+ */
+ public static void run_gsettings_migrator_v2() {
+ var source = SettingsSchemaSource.get_default();
+ var schema = source.lookup("org.yorba.shotwell", true);
+ var settings = new Settings.full(schema, null, null);
+
+ copy_schema(settings);
+
+ Settings.sync();
+ }
+
+ static void copy_schema(Settings settings) {
+ SettingsSchema schema;
+ ((Object)settings).get("settings-schema", out schema, null);
+ var id = schema.get_id();
+ var path = schema.get_path();
+
+ var new_id = id.replace("org.yorba.shotwell", "org.gnome.shotwell");
+ var new_path = path.replace("/org/yorba/shotwell", "/org/gnome/shotwell");
+
+ var new_schema = SettingsSchemaSource.get_default().lookup(new_id, true);
+
+ // If we cannot find this schema, we cannot migrate the keys anyway, so skip it
+ if (new_schema != null) {
+ var new_settings = new Settings.with_path(new_id, new_path);
+ new_settings.delay();
+
+ foreach (var k in schema.list_keys()) {
+ var key = schema.get_key(k);
+ var default_value = key.get_default_value();
+ var val = settings.get_value(k);
+ if (val.equal(default_value)) {
+ debug("%s is default value, skipping", k);
+ continue;
+ }
+
+ if (!new_schema.has_key(k)) {
+ debug("Cannot migrate %s as it does not exist", k);
+ continue;
+ }
+
+ debug("Will migrate %s %s @ %s -> %s:%s %s", k, id, path, new_id, new_path, val.print(true));
+ if (!new_settings.set_value(k, val)) {
+ debug(" Failed...");
+ }
+ }
+ new_settings.apply();
+ }
+ else {
+ debug("%s does not exist, skipping\n", new_id);
+ }
+
+ foreach (var c in schema.list_children()) {
+ var child = settings.get_child(c);
+ copy_schema(child);
+ }
+ }
}