diff --git a/ext/bg/js/backend.js b/ext/bg/js/backend.js index 80b00d5f..08ce82a2 100644 --- a/ext/bg/js/backend.js +++ b/ext/bg/js/backend.js @@ -122,7 +122,8 @@ class Backend { ['logIndicatorClear', {async: false, contentScript: true, handler: this._onApiLogIndicatorClear.bind(this)}], ['createActionPort', {async: false, contentScript: true, handler: this._onApiCreateActionPort.bind(this)}], ['modifySettings', {async: true, contentScript: true, handler: this._onApiModifySettings.bind(this)}], - ['getSettings', {async: false, contentScript: true, handler: this._onApiGetSettings.bind(this)}] + ['getSettings', {async: false, contentScript: true, handler: this._onApiGetSettings.bind(this)}], + ['setAllSettings', {async: true, contentScript: false, handler: this._onApiSetAllSettings.bind(this)}] ]); this._messageHandlersWithProgress = new Map([ ['importDictionaryArchive', {async: true, contentScript: false, handler: this._onApiImportDictionaryArchive.bind(this)}], @@ -317,15 +318,6 @@ class Backend { return useSchema ? JsonSchema.createProxy(options, this.optionsSchema) : options; } - setFullOptions(options) { - try { - this.options = JsonSchema.getValidValueOrDefault(this.optionsSchema, utilIsolate(options)); - } catch (e) { - // This shouldn't happen, but catch errors just in case of bugs - yomichan.logError(e); - } - } - getOptions(optionsContext, useSchema=false) { return this.getProfile(optionsContext, useSchema).options; } @@ -860,6 +852,11 @@ class Backend { return results; } + async _onApiSetAllSettings({value, source}) { + this.options = JsonSchema.getValidValueOrDefault(this.optionsSchema, value); + await this._onApiOptionsSave({source}); + } + // Command handlers _createActionListenerPort(port, sender, handlers) { diff --git a/ext/bg/js/settings/backup.js b/ext/bg/js/settings/backup.js index e93e15bf..13f90886 100644 --- a/ext/bg/js/settings/backup.js +++ b/ext/bg/js/settings/backup.js @@ -141,7 +141,7 @@ class SettingsBackup { // Importing async _settingsImportSetOptionsFull(optionsFull) { - await this._settingsController.setOptionsFull(optionsFull); + await this._settingsController.setAllSettings(optionsFull); } _showSettingsImportError(error) { @@ -340,9 +340,6 @@ class SettingsBackup { // Assign options await this._settingsImportSetOptionsFull(optionsFull); - - // Reload settings page - window.location.reload(); } _onSettingsImportClick() { @@ -376,8 +373,5 @@ class SettingsBackup { // Assign options await this._settingsImportSetOptionsFull(optionsFull); - - // Reload settings page - window.location.reload(); } } diff --git a/ext/bg/js/settings/settings-controller.js b/ext/bg/js/settings/settings-controller.js index 9224aedf..4c902dff 100644 --- a/ext/bg/js/settings/settings-controller.js +++ b/ext/bg/js/settings/settings-controller.js @@ -38,9 +38,7 @@ class SettingsController extends EventDispatcher { set profileIndex(value) { if (this._profileIndex === value) { return; } - this._profileIndex = value; - this.trigger('optionsContextChanged'); - this._onOptionsUpdatedInternal(); + this._setProfileIndex(value); } prepare() { @@ -69,9 +67,10 @@ class SettingsController extends EventDispatcher { return utilBackend().getFullOptions(); } - async setOptionsFull(optionsFull) { - utilBackend().setFullOptions(utilBackgroundIsolate(optionsFull)); - await this.save(); + async setAllSettings(value) { + const profileIndex = value.profileCurrent; + await api.setAllSettings(value, this._source); + this._setProfileIndex(profileIndex); } async getGlobalSettings(targets) { @@ -104,6 +103,12 @@ class SettingsController extends EventDispatcher { // Private + _setProfileIndex(value) { + this._profileIndex = value; + this.trigger('optionsContextChanged'); + this._onOptionsUpdatedInternal(); + } + _onOptionsUpdated({source}) { if (source === this._source) { return; } this._onOptionsUpdatedInternal(); diff --git a/ext/mixed/js/api.js b/ext/mixed/js/api.js index 2d5ad9e7..075ea545 100644 --- a/ext/mixed/js/api.js +++ b/ext/mixed/js/api.js @@ -176,6 +176,10 @@ const api = (() => { return this._invoke('getSettings', {targets}); } + setAllSettings(value, source) { + return this._invoke('setAllSettings', {value, source}); + } + // Invoke functions with progress importDictionaryArchive(archiveContent, details, onProgress) {