From 4b27f586257924363ca814426da8423298f40b45 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald <jonas.jenwald@gmail.com> Date: Mon, 22 Mar 2021 14:19:50 +0100 Subject: [PATCH] Re-factor how the `BasePreferences.prefs`-property is initialized Looking at this now, I cannot understand why we'd need to initialize `this.prefs` with all of the values from `this.defaults`. Not only does this *indirectly* require one extra loop, via the `Object.assign`-call, but it also means that in GENERIC-builds changes to default-preference values might not be picked-up unless the the existing user-prefs are cleared (if the user had *manually* set prefs previously). --- web/preferences.js | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/web/preferences.js b/web/preferences.js index 125007031..6e8b9b048 100644 --- a/web/preferences.js +++ b/web/preferences.js @@ -35,25 +35,16 @@ class BasePreferences { enumerable: true, configurable: false, }); - this.prefs = Object.assign(Object.create(null), this.defaults); + this.prefs = Object.create(null); this._initializedPromise = this._readFromStorage(this.defaults).then( prefs => { - if (!prefs) { - return; - } - for (const name in prefs) { - const defaultValue = this.defaults[name], - prefValue = prefs[name]; - // Ignore preferences not present in, or whose types don't match, - // the default values. - if ( - defaultValue === undefined || - typeof prefValue !== typeof defaultValue - ) { - continue; + for (const name in this.defaults) { + const prefValue = prefs?.[name]; + // Ignore preferences whose types don't match the default values. + if (typeof prefValue === typeof this.defaults[name]) { + this.prefs[name] = prefValue; } - this.prefs[name] = prefValue; } } ); @@ -86,7 +77,7 @@ class BasePreferences { */ async reset() { await this._initializedPromise; - this.prefs = Object.assign(Object.create(null), this.defaults); + this.prefs = Object.create(null); return this._writeToStorage(this.defaults); } @@ -114,8 +105,7 @@ class BasePreferences { value = value.toString(); } else { throw new Error( - `Set preference: "${value}" is a ${valueType}, ` + - `expected a ${defaultType}.` + `Set preference: "${value}" is a ${valueType}, expected a ${defaultType}.` ); } } else {