From cf534e2927476cc83955b257223f442c46e7b2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?nicole=20miko=C5=82ajczyk?= Date: Fri, 6 Mar 2026 14:49:45 +0100 Subject: [PATCH] nicolium: load settings from own account notes on supported platforms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: nicole mikołajczyk --- packages/nicolium/src/actions/me.ts | 53 +++++++++++++++++------ packages/nicolium/src/actions/settings.ts | 2 + 2 files changed, 42 insertions(+), 13 deletions(-) diff --git a/packages/nicolium/src/actions/me.ts b/packages/nicolium/src/actions/me.ts index b86b0ab3d..5b27aa032 100644 --- a/packages/nicolium/src/actions/me.ts +++ b/packages/nicolium/src/actions/me.ts @@ -86,21 +86,48 @@ const patchMe = dispatch(patchMeSuccess(response)); }); -const fetchMeSuccess = (account: CredentialAccount) => { - setSentryAccount(account); +interface MeFetchSuccessAction { + type: typeof ME_FETCH_SUCCESS; + me: CredentialAccount; +} - useSettingsStore - .getState() - .actions.loadUserSettings( - account.settings_store?.[FE_NAME] || account.settings_store?.[LEGACY_FE_NAME], - ); - useComposeStore.getState().actions.importDefaultSettings(account); +const fetchMeSuccess = + (account: CredentialAccount) => async (dispatch: AppDispatch, getState: () => RootState) => { + const client = getClient(getState); - return { - type: ME_FETCH_SUCCESS, - me: account, + setSentryAccount(account); + + const settings = account.settings_store?.[FE_NAME] || account.settings_store?.[LEGACY_FE_NAME]; + + if (client.features.frontendConfigurations) { + useSettingsStore.getState().actions.loadUserSettings(settings); + } else if (client.features.notes) { + const note = await getClient(getState) + .accounts.getRelationships([account.id]) + .then((relationships) => relationships[0]?.note); + + if (note) { + const match = note.match(/(.*)<\/nicolium-config>/); + + if (match) { + try { + const frontendConfig = JSON.parse(decodeURIComponent(match[1])); + console.log(frontendConfig); + useSettingsStore.getState().actions.loadUserSettings(frontendConfig); + return frontendConfig; + } catch (error) { + console.error('Failed to parse frontend config from account note', error); + } + } + } + } + useComposeStore.getState().actions.importDefaultSettings(account); + + return dispatch({ + type: ME_FETCH_SUCCESS, + me: account, + }); }; -}; const fetchMeFail = (error: unknown) => ({ type: ME_FETCH_FAIL, @@ -123,7 +150,7 @@ const patchMeSuccess = (me: CredentialAccount) => (dispatch: AppDispatch) => { }; type MeAction = - | ReturnType + | MeFetchSuccessAction | ReturnType | MeFetchSkipAction | MePatchSuccessAction; diff --git a/packages/nicolium/src/actions/settings.ts b/packages/nicolium/src/actions/settings.ts index 2abcc0bb6..a835becb8 100644 --- a/packages/nicolium/src/actions/settings.ts +++ b/packages/nicolium/src/actions/settings.ts @@ -86,6 +86,8 @@ const updateSettingsStore = }), ); } else if (client.features.notes) { + // Inspired by Phanpy and designed for compatibility with other software doing this + // https://github.com/cheeaun/phanpy/commit/a8b5c8cd64d456d30aab09dc56da7e4e20100e67 const note = (await client.accounts.getRelationships([state.me as string]))[0]?.note; const settingsNote = `${encodeURIComponent(JSON.stringify(settings))}`;