[gnome-shell] extensionUtils: Include some more helper functions



commit 93425b05004094520790b12953bc3aa50f85367c
Author: Florian Müllner <fmuellner gnome org>
Date:   Sat Jul 14 20:16:13 2018 +0200

    extensionUtils: Include some more helper functions
    
    Those functions originated in gnome-shell-extension's Convenience
    module which is copied by almost every extension out there. Let's
    make people's life just a little bit easier by including the code
    ourselves.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/150

 js/misc/extensionUtils.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)
---
diff --git a/js/misc/extensionUtils.js b/js/misc/extensionUtils.js
index be6db8343..cf308b31f 100644
--- a/js/misc/extensionUtils.js
+++ b/js/misc/extensionUtils.js
@@ -3,6 +3,7 @@
 // Common utils for the extension system and the extension
 // preferences tool
 
+const Gettext = imports.gettext;
 const Signals = imports.signals;
 
 const Gio = imports.gi.Gio;
@@ -63,6 +64,66 @@ function getCurrentExtension() {
     return null;
 }
 
+/**
+ * initTranslations:
+ * @domain: (optional): the gettext domain to use
+ *
+ * Initialize Gettext to load translations from extensionsdir/locale.
+ * If @domain is not provided, it will be taken from metadata['gettext-domain']
+ */
+function initTranslations(domain) {
+    let extension = getCurrentExtension();
+
+    if (!extension)
+        throw new Error('initTranslations() can only be called from extensions');
+
+    domain = domain || extension.metadata['gettext-domain'];
+
+    // Expect USER extensions to have a locale/ subfolder, otherwise assume a
+    // SYSTEM extension that has been installed in the same prefix as the shell
+    let localeDir = extension.dir.get_child('locale');
+    if (localeDir.query_exists(null))
+        Gettext.bindtextdomain(domain, localeDir.get_path());
+    else
+        Gettext.bindtextdomain(domain, Config.LOCALEDIR);
+}
+
+/**
+ * getSettings:
+ * @schema: (optional): the GSettings schema id
+ *
+ * Builds and returns a GSettings schema for @schema, using schema files
+ * in extensionsdir/schemas. If @schema is omitted, it is taken from
+ * metadata['settings-schema'].
+ */
+function getSettings(schema) {
+    let extension = getCurrentExtension();
+
+    if (!extension)
+        throw new Error('getSettings() can only be called from extensions');
+
+    schema = schema || extension.metadata['settings-schema'];
+
+    const GioSSS = Gio.SettingsSchemaSource;
+
+    // Expect USER extensions to have a schemas/ subfolder, otherwise assume a
+    // SYSTEM extension that has been installed in the same prefix as the shell
+    let schemaDir = extension.dir.get_child('schemas');
+    let schemaSource;
+    if (schemaDir.query_exists(null))
+        schemaSource = GioSSS.new_from_directory(schemaDir.get_path(),
+                                                 GioSSS.get_default(),
+                                                 false);
+    else
+        schemaSource = GioSSS.get_default();
+
+    let schemaObj = schemaSource.lookup(schema, true);
+    if (!schemaObj)
+        throw new Error(`Schema ${schema} could not be found for extension ${extension.metadata.uuid}. 
Please check your installation`);
+
+    return new Gio.Settings({ settings_schema: schemaObj });
+}
+
 /**
  * versionCheck:
  * @required: an array of versions we're compatible with


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