From dfdefc15d31b401092760926756150a839f52487 Mon Sep 17 00:00:00 2001 From: toasted-nutbread Date: Tue, 27 Oct 2020 19:26:30 -0400 Subject: Options fixes (#962) * Fix default options not having the correct versions * Move schema validation * Remove legacy version number * Add tests for OptionsUtil.getDefault() * Remove unused getValidValueOrDefault --- ext/bg/data/options-schema.json | 5 ----- ext/bg/js/options.js | 34 +++++++++++++++++++++++++-------- ext/bg/js/settings/backup-controller.js | 1 - 3 files changed, 26 insertions(+), 14 deletions(-) (limited to 'ext/bg') diff --git a/ext/bg/data/options-schema.json b/ext/bg/data/options-schema.json index c0a39ea2..d344a7b9 100644 --- a/ext/bg/data/options-schema.json +++ b/ext/bg/data/options-schema.json @@ -62,7 +62,6 @@ "options": { "type": "object", "required": [ - "version", "general", "audio", "scanning", @@ -72,10 +71,6 @@ "anki" ], "properties": { - "version": { - "type": "integer", - "minimum": 0 - }, "general": { "type": "object", "required": [ diff --git a/ext/bg/js/options.js b/ext/bg/js/options.js index 9e89e9bd..668be98e 100644 --- a/ext/bg/js/options.js +++ b/ext/bg/js/options.js @@ -82,7 +82,13 @@ class OptionsUtil { } // Generic updates - return await this._applyUpdates(options, this._getVersionUpdates()); + options = await this._applyUpdates(options, this._getVersionUpdates()); + + // Validation + options = this._schemaValidator.getValidValueOrDefault(this._optionsSchema, options); + + // Result + return options; } async load() { @@ -105,10 +111,10 @@ class OptionsUtil { if (typeof options !== 'undefined') { options = await this.update(options); + } else { + options = this.getDefault(); } - options = this._schemaValidator.getValidValueOrDefault(this._optionsSchema, options); - return options; } @@ -126,11 +132,10 @@ class OptionsUtil { } getDefault() { - return this._schemaValidator.getValidValueOrDefault(this._optionsSchema); - } - - getValidValueOrDefault(options) { - return this._schemaValidator.getValidValueOrDefault(this._optionsSchema, options); + const optionsVersion = this._getVersionUpdates().length; + const options = this._schemaValidator.getValidValueOrDefault(this._optionsSchema); + options.version = optionsVersion; + return options; } createValidatingProxy(options) { @@ -468,6 +473,10 @@ class OptionsUtil { { async: true, update: this._updateVersion4.bind(this) + }, + { + async: false, + update: this._updateVersion5.bind(this) } ]; } @@ -586,4 +595,13 @@ class OptionsUtil { await this._addFieldTemplatesToOptions(options, '/bg/data/anki-field-templates-upgrade-v4.handlebars'); return options; } + + _updateVersion5(options) { + // Version 5 changes: + // Removed legacy version number from profile options. + for (const profile of options.profiles) { + delete profile.options.version; + } + return options; + } } diff --git a/ext/bg/js/settings/backup-controller.js b/ext/bg/js/settings/backup-controller.js index 454ede85..d5fa28bc 100644 --- a/ext/bg/js/settings/backup-controller.js +++ b/ext/bg/js/settings/backup-controller.js @@ -336,7 +336,6 @@ class BackupController { // Upgrade options optionsFull = await this._optionsUtil.update(optionsFull); - optionsFull = this._optionsUtil.getValidValueOrDefault(optionsFull); // Check for warnings const sanitizationWarnings = this._settingsImportSanitizeOptions(optionsFull, true); -- cgit v1.2.3