more prefs storage work + move dontShowUpdateNotifs to prefs

This commit is contained in:
Henry Jameson 2022-08-10 02:31:41 +03:00
parent aa41cedd93
commit 2c0eb29b28
3 changed files with 52 additions and 7 deletions

View File

@ -38,7 +38,7 @@ const UpdateNotification = {
return !this.$store.state.instance.disableUpdateNotification && return !this.$store.state.instance.disableUpdateNotification &&
this.$store.state.users.currentUser && this.$store.state.users.currentUser &&
this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER && this.$store.state.serverSideStorage.flagStorage.updateCounter < CURRENT_UPDATE_COUNTER &&
!this.$store.state.serverSideStorage.flagStorage.dontShowUpdateNotifs !this.$store.state.serverSideStorage.prefsStorage.simple.dontShowUpdateNotifs
} }
}, },
methods: { methods: {
@ -48,7 +48,7 @@ const UpdateNotification = {
neverShowAgain () { neverShowAgain () {
this.toggleShow() this.toggleShow()
this.$store.commit('setFlag', { flag: 'updateCounter', value: CURRENT_UPDATE_COUNTER }) 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') this.$store.dispatch('pushServerSideStorage')
}, },
dismiss () { dismiss () {

View File

@ -14,9 +14,6 @@ export const defaultState = {
// storage of flags - stuff that can only be set and incremented // storage of flags - stuff that can only be set and incremented
flagStorage: { flagStorage: {
updateCounter: 0, // Counter for most recent update notification seen 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 reset: 0 // special flag that can be used to force-reset all flags, debug purposes only
// special reset codes: // special reset codes:
// 1000: trim keys to those known by currently running FE // 1000: trim keys to those known by currently running FE
@ -24,7 +21,9 @@ export const defaultState = {
}, },
prefsStorage: { prefsStorage: {
_journal: [], _journal: [],
simple: {} simple: {
dontShowUpdateNotifs: false
}
}, },
// raw data // raw data
raw: null, raw: null,
@ -248,6 +247,20 @@ export const mutations = {
setFlag (state, { flag, value }) { setFlag (state, { flag, value }) {
state.flagStorage[flag] = value state.flagStorage[flag] = value
state.dirty = true 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 if (!needPush) return
state.cache = _wrapData({ state.cache = _wrapData({
flagStorage: toRaw(state.flagStorage), flagStorage: toRaw(state.flagStorage),
prefsStorage: toRaw(state.flagStorage) prefsStorage: toRaw(state.prefsStorage)
}) })
const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } } const params = { pleroma_settings_store: { 'pleroma-fe': state.cache } }
rootState.api.backendInteractor rootState.api.backendInteractor

View File

@ -105,6 +105,38 @@ describe('The serverSideStorage module', () => {
expect(state.cache.flagStorage).to.eql(defaultState.flagStorage) 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', () => { describe('helper functions', () => {