From db9ef11f2893eae0905b091be361ff5417156beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 22 Jan 2020 15:09:05 +0100 Subject: [PATCH] extensionSystem: Install pending updates on startup Now that we have a way to check for updates and download them, we should actually apply them as well. Do this on startup before any extensions are initialized, to make sure we don't run into any conflicts with a previously loaded version. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/945 --- js/ui/extensionSystem.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) 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));