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 {