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 }