From 39b92b96fcaa5bc72cfb2e157589bd180955e1a2 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Fri, 29 Apr 2022 23:10:59 -0500 Subject: [PATCH] Store settings in IndexedDB even on unsupported backends --- app/soapbox/actions/me.js | 14 ++++++++++++++ app/soapbox/reducers/auth.js | 11 ++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/soapbox/actions/me.js b/app/soapbox/actions/me.js index 0d75025c2..8bbcc5fd8 100644 --- a/app/soapbox/actions/me.js +++ b/app/soapbox/actions/me.js @@ -1,3 +1,4 @@ +import KVStore from 'soapbox/storage/kv_store'; import { getAuthUserId, getAuthUserUrl } from 'soapbox/utils/auth'; import api from '../api'; @@ -46,6 +47,18 @@ export function fetchMe() { }; } +/** Update the auth account in IndexedDB for Mastodon, etc. */ +const persistAuthAccount = (account, params) => { + if (account && account.url) { + if (!account.pleroma) account.pleroma = {}; + + if (!account.pleroma.settings_store) { + account.pleroma.settings_store = params.pleroma_settings_store || {}; + } + KVStore.setItem(`authAccount:${account.url}`, account).catch(console.error); + } +}; + export function patchMe(params, formData = false) { return (dispatch, getState) => { dispatch(patchMeRequest()); @@ -59,6 +72,7 @@ export function patchMe(params, formData = false) { return api(getState) .patch('/api/v1/accounts/update_credentials', params, options) .then(response => { + persistAuthAccount(response.data, params); dispatch(patchMeSuccess(response.data)); }).catch(error => { dispatch(patchMeFail(error)); diff --git a/app/soapbox/reducers/auth.js b/app/soapbox/reducers/auth.js index 26d3c8794..24df1780e 100644 --- a/app/soapbox/reducers/auth.js +++ b/app/soapbox/reducers/auth.js @@ -260,7 +260,16 @@ const importMastodonPreload = (state, data) => { const persistAuthAccount = account => { if (account && account.url) { - KVStore.setItem(`authAccount:${account.url}`, account).catch(console.error); + const key = `authAccount:${account.url}`; + if (!account.pleroma) account.pleroma = {}; + KVStore.getItem(key).then(oldAccount => { + const settings = oldAccount?.pleroma?.settings_store || {}; + if (!account.pleroma.settings_store) { + account.pleroma.settings_store = settings; + } + KVStore.setItem(key, account); + }) + .catch(console.error); } };