From 972a3b2d44938ea4d148279c0978f0e66a7bc381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Fri, 2 Jun 2023 04:12:34 +0200 Subject: [PATCH] dbusServices/extensions: Load preferences as module Now that extensions themselves are imported as modules, do the same for their preference dialogs. Extensions must now export a class with a `fillPreferencesWindow()` method as default. Part-of: --- .../extensions/extensionPrefsDialog.js | 54 ++++++------------- 1 file changed, 16 insertions(+), 38 deletions(-) diff --git a/js/dbusServices/extensions/extensionPrefsDialog.js b/js/dbusServices/extensions/extensionPrefsDialog.js index a16476e78..404cbbeac 100644 --- a/js/dbusServices/extensions/extensionPrefsDialog.js +++ b/js/dbusServices/extensions/extensionPrefsDialog.js @@ -18,29 +18,24 @@ export const ExtensionPrefsDialog = GObject.registerClass({ search_enabled: false, }); - try { - ExtensionUtils.installImporter(extension); - - // give extension prefs access to their own extension object - ExtensionUtils.setCurrentExtension(extension); - - const prefsModule = extension.imports.prefs; - prefsModule.init(extension.metadata); - - if (prefsModule.fillPreferencesWindow) { - prefsModule.fillPreferencesWindow(this); - - if (!this.visible_page) - throw new Error('Extension did not provide any UI'); - } else { - const widget = prefsModule.buildPrefsWidget(); - const page = this._wrapWidget(widget); - this.add(page); - } - } catch (e) { + this._loadPrefs(extension).catch(e => { this._showErrorPage(e); logError(e, 'Failed to open preferences'); - } + }); + } + + async _loadPrefs(extension) { + // give extension prefs access to their own extension object + ExtensionUtils.setCurrentExtension(extension); + + const prefsJs = extension.dir.get_child('prefs.js'); + const prefsModule = await import(prefsJs.get_uri()); + + const prefsObj = new prefsModule.default(extension.metadata); + prefsObj.fillPreferencesWindow(this); + + if (!this.visible_page) + throw new Error('Extension did not provide any UI'); } set titlebar(w) { @@ -64,23 +59,6 @@ export const ExtensionPrefsDialog = GObject.registerClass({ const extension = ExtensionUtils.getCurrentExtension(); this.add(new ExtensionPrefsErrorPage(extension, e)); } - - _wrapWidget(widget) { - if (widget instanceof Adw.PreferencesPage) - return widget; - - const page = new Adw.PreferencesPage(); - if (widget instanceof Adw.PreferencesGroup) { - page.add(widget); - return page; - } - - const group = new Adw.PreferencesGroup(); - group.add(widget); - page.add(group); - - return page; - } }); const ExtensionPrefsErrorPage = GObject.registerClass({