Browse Source

Добавлено восстановление дефолтных настроек в объекте settings при их отсутствии

Book Pauk 4 years ago
parent
commit
8b66fd522d

+ 6 - 0
client/components/Reader/Reader.vue

@@ -331,6 +331,12 @@ class Reader extends Vue {
             this.checkActivateDonateHelpPage();
             this.loading = false;
 
+            //проверим состояние Settings, и обновим, если надо
+            const newSettings = rstore.addDefaultsToSettings(this.settings);
+            if (newSettings) {
+                this.commit('reader/setSettings', newSettings);
+            }
+
             this.updateRoute();
 
             await this.showWhatsNew();

+ 2 - 2
client/components/Reader/ServerStorage/ServerStorage.vue

@@ -505,7 +505,7 @@ class ServerStorage extends Vue {
 
                 const md = newRecentMod.data;
                 if (md.key && result[md.key])
-                    result[md.key] = utils.applyObjDiff(result[md.key], md.mod, true);
+                    result[md.key] = utils.applyObjDiff(result[md.key], md.mod, {isAddChanged: true});
 
                 if (!bookManager.loaded) {
                     this.warning('Ожидание загрузки списка книг перед синхронизацией');
@@ -569,7 +569,7 @@ class ServerStorage extends Vue {
 
                 let applyMod = this.cachedRecentMod.data;
                 if (applyMod && applyMod.key && newRecentPatch.data[applyMod.key])
-                    newRecentPatch.data[applyMod.key] = utils.applyObjDiff(newRecentPatch.data[applyMod.key], applyMod.mod, true);
+                    newRecentPatch.data[applyMod.key] = utils.applyObjDiff(newRecentPatch.data[applyMod.key], applyMod.mod, {isAddChanged: true});
 
                 newRecentMod = {rev: this.cachedRecentMod.rev + 1, data: {}};
                 needSaveRecentPatch = true;

+ 29 - 10
client/store/modules/reader.js

@@ -1,3 +1,5 @@
+import * as utils from '../../share/utils';
+
 const readerActions = {
     'help': 'Вызвать cправку',
     'loader': 'На страницу загрузки',
@@ -256,6 +258,25 @@ const settingDefaults = {
     userHotKeys: {},
 };
 
+for (const font of fonts)
+    settingDefaults.fontShifts[font.name] = font.fontVertShift;
+for (const font of webFonts)
+    settingDefaults.fontShifts[font.name] = font.fontVertShift;
+for (const button of toolButtons)
+    settingDefaults.showToolButton[button.name] = button.show;
+for (const hotKey of hotKeys)
+    settingDefaults.userHotKeys[hotKey.name] = hotKey.codes;
+
+function addDefaultsToSettings(settings) {
+    const diff = utils.getObjDiff(settings, settingDefaults);
+    
+    if (!utils.isEmptyObjDiffDeep(diff, {isApplyChange: false})) {
+        return utils.applyObjDiff(settings, diff, {isApplyChange: false});
+    }
+
+    return false;
+}
+
 const libsDefaults = {
     startLink: 'http://flibusta.is',
     comment: 'Флибуста | Книжное братство',
@@ -279,15 +300,6 @@ const libsDefaults = {
     ]
 };
 
-for (const font of fonts)
-    settingDefaults.fontShifts[font.name] = font.fontVertShift;
-for (const font of webFonts)
-    settingDefaults.fontShifts[font.name] = font.fontVertShift;
-for (const button of toolButtons)
-    settingDefaults.showToolButton[button.name] = button.show;
-for (const hotKey of hotKeys)
-    settingDefaults.userHotKeys[hotKey.name] = hotKey.codes;
-
 // initial state
 const state = {
     toolBarActive: true,
@@ -341,7 +353,13 @@ const mutations = {
         state.currentProfile = value;
     },
     setSettings(state, value) {
-        state.settings = Object.assign({}, state.settings, value);
+        const newSettings = Object.assign({}, state.settings, value);
+        const added = addDefaultsToSettings(newSettings);
+        if (added) {
+            state.settings = added;
+        } else {
+            state.settings = newSettings;
+        }
     },
     setSettingsRev(state, value) {
         state.settingsRev = Object.assign({}, state.settingsRev, value);
@@ -361,6 +379,7 @@ export default {
     fonts,
     webFonts,
     settingDefaults,
+    addDefaultsToSettings,
     libsDefaults,
 
     namespaced: true,