diff --git a/js/ui/extensionSystem.js b/js/ui/extensionSystem.js index 49e333fff..432859733 100644 --- a/js/ui/extensionSystem.js +++ b/js/ui/extensionSystem.js @@ -45,6 +45,7 @@ var ExtensionManager = class { return GLib.SOURCE_REMOVE; }); + this._installExtensionUpdates(); this._sessionUpdated(); } @@ -456,6 +457,21 @@ var ExtensionManager = class { }).forEach(extension => this.reloadExtension(extension)); } + _installExtensionUpdates() { + FileUtils.collectFromDatadirs('extension-updates', true, (dir, info) => { + let fileType = info.get_file_type(); + if (fileType !== Gio.FileType.DIRECTORY) + return; + let uuid = info.get_name(); + let extensionDir = Gio.File.new_for_path( + GLib.build_filenamev([global.userdatadir, 'extensions', uuid])); + + FileUtils.recursivelyDeleteDir(extensionDir, false); + FileUtils.recursivelyMoveDir(dir, extensionDir); + FileUtils.recursivelyDeleteDir(dir, true); + }); + } + _loadExtensions() { global.settings.connect(`changed::${ENABLED_EXTENSIONS_KEY}`, this._onEnabledExtensionsChanged.bind(this));