diff --git a/src/components/settings_modal/helpers/setting.js b/src/components/settings_modal/helpers/setting.js index cb9bb0466..a064e10f4 100644 --- a/src/components/settings_modal/helpers/setting.js +++ b/src/components/settings_modal/helpers/setting.js @@ -47,6 +47,10 @@ export default { type: Boolean, default: false, }, + local: { + type: Boolean, + default: false, + }, parentPath: { type: [String, Array], }, @@ -259,11 +263,17 @@ export default { const writePath = `simple.${readPath}` if (!this.timedApplyMode) { - useSyncConfigStore().setSimplePrefAndSave({ - path: writePath, - value, - }) - useSyncConfigStore().pushSyncConfig() + if (this.local) { + useLocalConfigStore().set({ + path: writePath, + value, + }) + } else { + useSyncConfigStore().setSimplePrefAndSave({ + path: writePath, + value, + }) + } } else { if (useInterfaceStore().temporaryChangesTimeoutId !== null) { console.error("Can't track more than one temporary change") @@ -272,18 +282,30 @@ export default { const oldValue = get(this.configSource, readPath) - useSyncConfigStore().setPreference({ path: writePath, value }) + if (this.local) { + useLocalConfigStore().setTemporarily({ path: writePath, value }) + } else { + useSyncConfigStore().setPreference({ path: writePath, value }) + } const confirm = () => { - useSyncConfigStore().pushSyncConfig() + if (this.local) { + useLocalConfigStore().set({ path: writePath, value }) + } else { + useSyncConfigStore().pushSyncConfig() + } useInterfaceStore().clearTemporaryChanges() } const revert = () => { - useSyncConfigStore().setPreference({ - path: writePath, - value: oldValue, - }) + if (this.local) { + useLocalConfigStore().unsetTemporarily({ path: writePath, value }) + } else { + useSyncConfigStore().setPreference({ + path: writePath, + value: oldValue, + }) + } useInterfaceStore().clearTemporaryChanges() } diff --git a/src/components/status_body/status_body.vue b/src/components/status_body/status_body.vue index 677781d97..963f81ff8 100644 --- a/src/components/status_body/status_body.vue +++ b/src/components/status_body/status_body.vue @@ -49,6 +49,7 @@ :is-local="status.is_local" @parse-ready="onParseReady" /> + {{ mergedConfig }}
[ k, - v ?? instancePrefs[k], + state.tempStorage[k] ?? v ?? instancePrefs[k], ]), ) return result @@ -44,7 +53,10 @@ export const useLocalConfigStore = defineStore('local_config', { }, persist: { afterLoad(state) { - return state + return { + prefStorage: state.prefsStorage, + tempStorage: { ...configDefaultState }, + } }, }, }) diff --git a/src/stores/sync_config.js b/src/stores/sync_config.js index 05a47fa64..2f93fbef4 100644 --- a/src/stores/sync_config.js +++ b/src/stores/sync_config.js @@ -26,6 +26,8 @@ export const NEW_USER_DATE = new Date('2022-08-04') // date of writing this, bas export const COMMAND_TRIM_FLAGS = 1000 export const COMMAND_TRIM_FLAGS_AND_RESET = 1001 +export const COMMAND_WIPE_JOURNAL = 1010 +export const COMMAND_WIPE_JOURNAL_AND_STORAGE = 1011 export const defaultState = { // do we need to update data on server? @@ -34,7 +36,7 @@ export const defaultState = { flagStorage: { updateCounter: 0, // Counter for most recent update notification seen configMigration: 0, // Counter for config -> server-side migrations - reset: 0, // special flag that can be used to force-reset all flags, debug purposes only + reset: 0, // special flag that can be used to force-reset all data, debug purposes only // special reset codes: // 1000: trim keys to those known by currently running FE // 1001: same as above + reset everything to 0 @@ -379,16 +381,30 @@ export const _resetFlags = ( result[flag] = 0 }) } - } else if (totalFlags.reset > 0 && totalFlags.reset < 9000) { - console.debug('Received command to reset the flags') - allFlagKeys.forEach((flag) => { - result[flag] = 0 - }) } result.reset = 0 return result } +export const _resetPrefs = ( + totalFlags, + totalPrefs, + knownKeys = defaultState.flagStorage, +) => { + // prefs reset functionality + if ( + totalFlags.reset >= COMMAND_WIPE_JOURNAL && + totalFlags.reset <= COMMAND_WIPE_JOURNAL_AND_STORAGE + ) { + console.debug('Received command to reset journals') + clearJournals() + if (totalFlags.reset === COMMAND_WIPE_JOURNAL_AND_STORAGE) { + console.debug('Received command to reset storage') + return cloneDeep(defaultState) + } + } return totalPrefs +} + export const _doMigrations = (cache, live) => { const data = cache ?? live @@ -578,6 +594,14 @@ export const useSyncConfigStore = defineStore('sync_config', { Object.keys(this).forEach((k) => { this[k] = blankState[k] }) + this.flagStorage.reset = COMMAND_WIPE_JOURNAL_AND_STORAGE + }, + clearJournals() { + this.flagStorage.reset = COMMAND_WIPE_JOURNAL + this.prefsStorage._journal = [] + this.cache.prefsStorage._journal = [] + this.raw.prefsStorage._journal = [] + this.pushSyncConfig() }, setSyncConfig(userData) { const live = userData.storage @@ -633,6 +657,7 @@ export const useSyncConfigStore = defineStore('sync_config', { totalPrefs = recent.prefsStorage } + totalPrefs = _resetPrefs(totalPrefs, totalFlags) totalFlags = _resetFlags(totalFlags) recent.flagStorage = { ...flagsTemplate, ...totalFlags }