commit: 2c0eb29b286edf57d75c6044855ea5be9187493b
parent aa41cedd932e88b030ecc3cc54848b5aa300eec3
Author: Henry Jameson <me@hjkos.com>
Date: Wed, 10 Aug 2022 02:31:41 +0300
more prefs storage work + move dontShowUpdateNotifs to prefs
Diffstat:
3 files changed, 52 insertions(+), 7 deletions(-)
diff --git a/src/components/update_notification/update_notification.js b/src/components/update_notification/update_notification.js
@@ -38,7 +38,7 @@ const UpdateNotification = {
return !this.$store.state.instance.disableUpdateNotification &&
this.$store.state.users.currentUser &&
this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER &&
- !this.$store.state.serverSideStorage.flagStorage.dontShowUpdateNotifs
+ !this.$store.state.serverSideStorage.prefsStorage.simple.dontShowUpdateNotifs
}
},
methods: {
@@ -48,7 +48,7 @@ const UpdateNotification = {
neverShowAgain () {
this.toggleShow()
this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER })
- this.$store.commit('setFlag', { flag: 'dontShowUpdateNotifs', value: 1 })
+ this.$store.commit('setPreference', { path: 'simple.dontShowUpdateNotifs', value: true })
this.$store.dispatch('pushServerSideStorage')
},
dismiss () {
diff --git a/src/modules/serverSideStorage.js b/src/modules/serverSideStorage.js
@@ -14,9 +14,6 @@ export const defaultState = {
// storage of flags - stuff that can only be set and incremented
flagStorage: {
updateCounter: 0, // Counter for most recent update notification seen
- // TODO move to prefsStorage when that becomes a thing since only way
- // this can be reset is by complete reset of all flags
- dontShowUpdateNotifs: 0, // if user chose to not show update notifications ever again
reset: 0 // special flag that can be used to force-reset all flags, debug purposes only
// special reset codes:
// 1000: trim keys to those known by currently running FE
@@ -24,7 +21,9 @@ export const defaultState = {
},
prefsStorage: {
_journal: [],
- simple: {}
+ simple: {
+ dontShowUpdateNotifs: false
+ }
},
// raw data
raw: null,
@@ -248,6 +247,20 @@ export const mutations = {
setFlag (state, { flag, value }) {
state.flagStorage[flag] = value
state.dirty = true
+ },
+ setPreference (state, { path, value }) {
+ if (path.startsWith('_')) {
+ console.error(`tried to edit internal (starts with _) field '${path}', ignoring.`)
+ return
+ }
+ set(state.prefsStorage, path, value)
+ state.prefsStorage._journal = uniqBy(
+ [
+ ...state.prefsStorage._journal,
+ { command: 'set', path, args: [value], timestamp: Date.now() }
+ ].sort((a, b) => a.timestamp > b.timestamp ? -1 : 1),
+ 'path'
+ ).reverse()
}
}
@@ -262,7 +275,7 @@ const serverSideStorage = {
if (!needPush) return
state.cache = _wrapData({
flagStorage: toRaw(state.flagStorage),
- prefsStorage: toRaw(state.flagStorage)
+ prefsStorage: toRaw(state.prefsStorage)
})
const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } }
rootState.api.backendInteractor
diff --git a/test/unit/specs/modules/serverSideStorage.spec.js b/test/unit/specs/modules/serverSideStorage.spec.js
@@ -105,6 +105,38 @@ describe('The serverSideStorage module', () => {
expect(state.cache.flagStorage).to.eql(defaultState.flagStorage)
})
})
+ describe('setPreference', () => {
+ const { setPreference } = mutations
+
+ it('should set preference and update journal log accordingly', () => {
+ const state = cloneDeep(defaultState)
+ setPreference(state, { path: 'simple.testing', value: 1 })
+ expect(state.prefsStorage.simple.testing).to.eql(1)
+ expect(state.prefsStorage._journal.length).to.eql(1)
+ expect(state.prefsStorage._journal[0]).to.eql({
+ path: 'simple.testing',
+ command: 'set',
+ args: [1],
+ // should have A timestamp, we don't really care what it is
+ timestamp: state.prefsStorage._journal[0].timestamp
+ })
+ })
+
+ it('should keep journal to a minimum (one entry per path)', () => {
+ const state = cloneDeep(defaultState)
+ setPreference(state, { path: 'simple.testing', value: 1 })
+ setPreference(state, { path: 'simple.testing', value: 2 })
+ expect(state.prefsStorage.simple.testing).to.eql(1)
+ expect(state.prefsStorage._journal.length).to.eql(1)
+ expect(state.prefsStorage._journal[0]).to.eql({
+ path: 'simple.testing',
+ command: 'set',
+ args: [2],
+ // should have A timestamp, we don't really care what it is
+ timestamp: state.prefsStorage._journal[0].timestamp
+ })
+ })
+ })
})
describe('helper functions', () => {