Merge pull request 'Fix setting restore from file' (#406) from Oneric/akkoma-fe:fix-file-restore into develop

Reviewed-on: https://akkoma.dev/AkkomaGang/akkoma-fe/pulls/406
This commit is contained in:
floatingghost 2024-08-25 09:07:18 +00:00
commit 1f2c96a485
1 changed files with 26 additions and 18 deletions

View File

@ -22,7 +22,7 @@ export const multiChoiceProperties = [
export const defaultState = {
profile: 'default',
profileVersion: 0,
profileVersion: 0, // internal fe copy of server-side version
expertLevel: 0, // used to track which settings to show and hide
colors: {},
theme: undefined,
@ -127,6 +127,21 @@ export const instanceDefaultProperties = Object.entries(defaultState)
.filter(([key, value]) => value === undefined)
.map(([key, value]) => key)
function updateLocalSettings(store, settingEntries, version = null) {
if (version == null)
version = store.state.profileVersion
settingEntries.forEach(([name, value]) => {
if (store.state[name] !== value) {
store.dispatch('setOption', { name, value })
}
})
// Set this at the end to override any potentially stored profileVersion
store.commit('setOption', { name: 'profileVersion', value: version })
}
const config = {
state: { ...defaultState },
getters: {
@ -198,19 +213,17 @@ const config = {
store.dispatch('listSettingsProfiles')
})
},
loadSettings ({ dispatch }, data) {
loadSettings (store, data) {
const knownKeys = new Set(Object.keys(defaultState))
const presentKeys = new Set(Object.keys(data))
const intersection = new Set()
for (let elem of presentKeys) {
if (knownKeys.has(elem)) {
intersection.add(elem)
}
}
intersection.forEach(
name => dispatch('setOption', { name, value: data[name] })
)
// Limit to supported properties
const newSettingEntries =
Object.entries(data)
.filter(([key, value]) => knownKeys.has(key))
// disregard stored profileVersion; sync afterwards increases previous version
updateLocalSettings(store, newSettingEntries, null)
store.dispatch('syncSettings')
},
setHighlight ({ commit, dispatch }, { user, color, type }) {
commit('setHighlight', { user, color, type })
@ -244,12 +257,7 @@ const config = {
.then(({ settings, version }) => {
console.log('found settings version', version)
if (forceUpdate || (version > store.state.profileVersion)) {
store.commit('setOption', { name: 'profileVersion', value: version })
Object.entries(settings).forEach(([name, value]) => {
if (store.state[name] !== value) {
store.dispatch('setOption', { name, value })
}
})
updateLocalSettings(store, Object.entries(settings), version)
} else {
console.log('settings are up to date')
}