From 0a1f1d499044189b30651bf69ff3a10bb53dae4b Mon Sep 17 00:00:00 2001 From: Rexogamer Date: Sun, 16 Feb 2025 07:35:16 +0000 Subject: [PATCH] fix: move the instance URL out of settings --- src/Generic.tsx | 8 -------- src/SideMenu.tsx | 3 ++- src/components/sheets/SettingsSheet.tsx | 2 ++ src/lib/auth/login.ts | 3 ++- src/lib/client/index.ts | 14 ++++++-------- src/lib/storage/utils.ts | 8 ++++++++ src/pages/auth/LoginPage.tsx | 3 ++- src/pages/auth/LoginSettingsPage.tsx | 9 ++++----- 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/Generic.tsx b/src/Generic.tsx index 0746cd4f..05e92ea0 100644 --- a/src/Generic.tsx +++ b/src/Generic.tsx @@ -279,14 +279,6 @@ export const app = { default: false, type: 'boolean', }, - - // instance URL - { - key: 'app.instance', - category: 'donotshow', - default: DEFAULT_API_URL, - type: 'string', - }, ] as Setting[], }, setTheme: (themeName: string) => { diff --git a/src/SideMenu.tsx b/src/SideMenu.tsx index e339d498..80d69a2c 100644 --- a/src/SideMenu.tsx +++ b/src/SideMenu.tsx @@ -23,6 +23,7 @@ import {client} from '@clerotri/lib/client'; import {DEFAULT_API_URL} from '@clerotri/lib/consts'; import {ChannelContext, SideMenuContext} from '@clerotri/lib/state'; import {storage} from '@clerotri/lib/storage'; +import {getInstanceURL} from '@clerotri/lib/storage/utils'; import {commonValues, Theme, ThemeContext} from '@clerotri/lib/themes'; import {useBackHandler} from '@clerotri/lib/ui'; @@ -73,7 +74,7 @@ const SideMenu = () => { setCurrentServer(s)} onServerLongPress={(s: Server) => app.openServerContextMenu(s)} - showDiscover={app.settings.get('app.instance') === DEFAULT_API_URL} + showDiscover={getInstanceURL() === DEFAULT_API_URL} /> diff --git a/src/components/sheets/SettingsSheet.tsx b/src/components/sheets/SettingsSheet.tsx index be0c2e4d..7b67b897 100644 --- a/src/components/sheets/SettingsSheet.tsx +++ b/src/components/sheets/SettingsSheet.tsx @@ -17,6 +17,7 @@ import {app, setFunction} from '@clerotri/Generic'; import {client} from '@clerotri/lib/client'; import {OPEN_ISSUES} from '@clerotri/lib/consts'; import {storage} from '@clerotri/lib/storage'; +import {getInstanceURL} from '@clerotri/lib/storage/utils'; import {ThemeContext} from '@clerotri/lib/themes'; import {SettingsSection} from '@clerotri/lib/types'; import {openUrl} from '@clerotri/lib/utils'; @@ -48,6 +49,7 @@ async function copyDebugInfo() { }, appInfo: { + instance: getInstanceURL(), userID: client.user?._id ?? 'ERR_ID_UNDEFINED', settings: storage.getString('settings'), version: app.version, diff --git a/src/lib/auth/login.ts b/src/lib/auth/login.ts index 727b0504..e08ec94f 100644 --- a/src/lib/auth/login.ts +++ b/src/lib/auth/login.ts @@ -154,7 +154,8 @@ export async function loginWithSavedToken(status: string) { await client.useExistingSession({token: res}); } catch (e: any) { console.log(e); - !e.message?.startsWith('Read error') && e.message !== 'Network Error' && + !e.message?.startsWith('Read error') && + e.message !== 'Network Error' && client.user ? app.setLoggedOutScreen('loginPage') : status === 'loggedIn' diff --git a/src/lib/client/index.ts b/src/lib/client/index.ts index ffdd0067..0997924d 100644 --- a/src/lib/client/index.ts +++ b/src/lib/client/index.ts @@ -1,23 +1,21 @@ import {Client} from 'revolt.js'; -import {app} from '@clerotri/Generic'; import {DEFAULT_API_URL} from '@clerotri/lib/consts'; +import {storage} from '@clerotri/lib/storage'; function getAPIURL() { - console.log(`[APP] Initialised settings (${new Date().getTime()})`); let url: string = ''; console.log('[AUTH] Getting API URL...'); - const instance = app.settings.get('app.instance') as - | string - | null - | undefined; + + const instance = storage.getString('instanceURL'); + if (!instance) { console.log( - '[AUTH] Unable to fetch app.instance; setting apiURL to default', + '[AUTH] Unable to fetch instanceURL; setting apiURL to default', ); url = DEFAULT_API_URL; } else { - console.log(`[AUTH] Fetched app.instance; setting apiURL to ${instance}`); + console.log(`[AUTH] Fetched instanceURL; setting apiURL to ${instance}`); url = instance; } return url; diff --git a/src/lib/storage/utils.ts b/src/lib/storage/utils.ts index cc34ed1d..e0ba71ef 100644 --- a/src/lib/storage/utils.ts +++ b/src/lib/storage/utils.ts @@ -1,4 +1,5 @@ import {app} from '@clerotri/Generic'; +import {DEFAULT_API_URL} from '@clerotri/lib/consts'; import {storage} from '@clerotri/lib/storage'; import {Setting} from '@clerotri/lib/types'; @@ -8,6 +9,9 @@ export function initialiseSettings() { try { const settings = JSON.parse(s) as {key: string; value: any}[]; settings.forEach(key => { + if (key.key === 'app.instance') { + storage.set('instanceURL', key.value); + } let st: Setting | undefined; for (const setting of app.settings.list) { if (setting.key === key.key) { @@ -26,3 +30,7 @@ export function initialiseSettings() { } } } + +export function getInstanceURL() { + return storage.getString('instanceURL') ?? DEFAULT_API_URL; +} diff --git a/src/pages/auth/LoginPage.tsx b/src/pages/auth/LoginPage.tsx index 1820baf8..0a0bffae 100644 --- a/src/pages/auth/LoginPage.tsx +++ b/src/pages/auth/LoginPage.tsx @@ -15,6 +15,7 @@ import { } from '@clerotri/components/common/atoms'; import {loginRegular, loginWithToken} from '@clerotri/lib/auth'; import {OFFICIAL_INSTANCE_SIGNUP_URL} from '@clerotri/lib/consts'; +import {getInstanceURL} from '@clerotri/lib/storage/utils'; import {commonValues, ThemeContext} from '@clerotri/lib/themes'; import {useBackHandler} from '@clerotri/lib/ui'; import {openUrl} from '@clerotri/lib/utils'; @@ -93,7 +94,7 @@ function LoginTypeSelector({ {t('app.login.instance_notice', { - url: app.settings.get('app.instance'), + url: getInstanceURL(), })} diff --git a/src/pages/auth/LoginSettingsPage.tsx b/src/pages/auth/LoginSettingsPage.tsx index 3e699a25..d6612651 100644 --- a/src/pages/auth/LoginSettingsPage.tsx +++ b/src/pages/auth/LoginSettingsPage.tsx @@ -1,7 +1,6 @@ import {useContext, useState} from 'react'; import {View} from 'react-native'; -import {app} from '@clerotri/Generic'; import { BackButton, Button, @@ -9,15 +8,15 @@ import { Text, } from '@clerotri/components/common/atoms'; import {LoadingScreen} from '@clerotri/components/views/LoadingScreen'; +import {storage} from '@clerotri/lib/storage'; +import {getInstanceURL} from '@clerotri/lib/storage/utils'; import {commonValues, ThemeContext} from '@clerotri/lib/themes'; import {useBackHandler} from '@clerotri/lib/ui'; export const LoginSettingsPage = ({callback}: {callback: () => void}) => { const {currentTheme} = useContext(ThemeContext); - const [instanceURL, setInstanceURL] = useState( - (app.settings.get('app.instance') as string) ?? '', - ); + const [instanceURL, setInstanceURL] = useState(getInstanceURL()); const [testResponse, setTestResponse] = useState(null as string | null); const [saved, setSaved] = useState(false); @@ -112,7 +111,7 @@ export const LoginSettingsPage = ({callback}: {callback: () => void}) => { const isValid = await testURL(instanceURL, true); if (isValid) { console.log(`[AUTH] Setting instance URL to ${instanceURL}`); - app.settings.set('app.instance', instanceURL); + storage.set('instanceURL', instanceURL); setSaved(true); } }}>