diff --git a/packages/client/src/init.ts b/packages/client/src/init.ts index 113324d49..b15291174 100644 --- a/packages/client/src/init.ts +++ b/packages/client/src/init.ts @@ -29,7 +29,7 @@ import { stream } from '@/stream'; import * as sound from '@/scripts/sound'; import { $i, refreshAccount, login, updateAccount, signout } from '@/account'; import { defaultStore, ColdDeviceStorage } from '@/store'; -import { fetchInstance, instance } from '@/instance'; +import { instance, instanceMetaReady } from '@/instance'; import { makeHotkey } from '@/scripts/hotkey'; import { search } from '@/scripts/search'; import { deviceKind } from '@/scripts/device-kind'; @@ -159,7 +159,7 @@ if ($i && $i.token) { } //#endregion -fetchInstance().then(() => { +instanceMetaReady.then(() => { localStorage.setItem('v', instance.version); // Init service worker diff --git a/packages/client/src/instance.ts b/packages/client/src/instance.ts index 6e912aa2e..85ad84b43 100644 --- a/packages/client/src/instance.ts +++ b/packages/client/src/instance.ts @@ -8,11 +8,11 @@ const data = localStorage.getItem('instance'); // TODO: instanceをリアクティブにするかは再考の余地あり -export const instance: Misskey.entities.InstanceMetadata = reactive(data ? JSON.parse(data) : { +export const instance: Misskey.entities.InstanceMetadata = reactive(data != null ? JSON.parse(data) : { // TODO: set default values }); -export async function fetchInstance() { +async function fetchInstance() { const meta = await api('meta', { detail: false }); @@ -24,6 +24,11 @@ export async function fetchInstance() { localStorage.setItem('instance', JSON.stringify(instance)); } +const initialFetchPromise = fetchInstance(); +export const instanceMetaReady = data != null ? Promise.resolve() : initialFetchPromise; + +export const refetchInstanceMeta = fetchInstance; + export const emojiCategories = computed(() => { if (instance.emojis == null) return []; const categories = new Set(); diff --git a/packages/client/src/pages/admin/bot-protection.vue b/packages/client/src/pages/admin/bot-protection.vue index 82ab15531..797080c1d 100644 --- a/packages/client/src/pages/admin/bot-protection.vue +++ b/packages/client/src/pages/admin/bot-protection.vue @@ -52,7 +52,7 @@ import FormSuspense from '@/components/form/suspense.vue'; import FormSlot from '@/components/form/slot.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -109,7 +109,7 @@ export default defineComponent({ recaptchaSiteKey: this.recaptchaSiteKey, recaptchaSecretKey: this.recaptchaSecretKey, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/email-settings.vue b/packages/client/src/pages/admin/email-settings.vue index 6491a453a..c8135e6ba 100644 --- a/packages/client/src/pages/admin/email-settings.vue +++ b/packages/client/src/pages/admin/email-settings.vue @@ -52,7 +52,7 @@ import FormSplit from '@/components/form/split.vue'; import FormSection from '@/components/form/section.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -129,7 +129,7 @@ export default defineComponent({ smtpUser: this.smtpUser, smtpPass: this.smtpPass, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/instance-block.vue b/packages/client/src/pages/admin/instance-block.vue index 6cadc7df3..97b2887d4 100644 --- a/packages/client/src/pages/admin/instance-block.vue +++ b/packages/client/src/pages/admin/instance-block.vue @@ -18,7 +18,7 @@ import FormTextarea from '@/components/form/textarea.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -50,7 +50,7 @@ export default defineComponent({ os.apiWithDialog('admin/update-meta', { blockedHosts: this.blockedHosts.split('\n') || [], }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/integrations.discord.vue b/packages/client/src/pages/admin/integrations.discord.vue index 8fc340150..87ea65e26 100644 --- a/packages/client/src/pages/admin/integrations.discord.vue +++ b/packages/client/src/pages/admin/integrations.discord.vue @@ -33,7 +33,7 @@ import FormInfo from '@/components/ui/info.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -72,7 +72,7 @@ export default defineComponent({ discordClientId: this.discordClientId, discordClientSecret: this.discordClientSecret, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/integrations.github.vue b/packages/client/src/pages/admin/integrations.github.vue index d9db9c00f..6990fa6f4 100644 --- a/packages/client/src/pages/admin/integrations.github.vue +++ b/packages/client/src/pages/admin/integrations.github.vue @@ -33,7 +33,7 @@ import FormInfo from '@/components/ui/info.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -72,7 +72,7 @@ export default defineComponent({ githubClientId: this.githubClientId, githubClientSecret: this.githubClientSecret, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/integrations.twitter.vue b/packages/client/src/pages/admin/integrations.twitter.vue index 1f8074535..3337b5e0e 100644 --- a/packages/client/src/pages/admin/integrations.twitter.vue +++ b/packages/client/src/pages/admin/integrations.twitter.vue @@ -33,7 +33,7 @@ import FormInfo from '@/components/ui/info.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -72,7 +72,7 @@ export default defineComponent({ twitterConsumerKey: this.twitterConsumerKey, twitterConsumerSecret: this.twitterConsumerSecret, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/integrations.vue b/packages/client/src/pages/admin/integrations.vue index 91d03fef3..23ae5d1b7 100644 --- a/packages/client/src/pages/admin/integrations.vue +++ b/packages/client/src/pages/admin/integrations.vue @@ -33,7 +33,7 @@ import XGithub from './integrations.github.vue'; import XDiscord from './integrations.discord.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { diff --git a/packages/client/src/pages/admin/object-storage.vue b/packages/client/src/pages/admin/object-storage.vue index 6c5be220f..64c08e30a 100644 --- a/packages/client/src/pages/admin/object-storage.vue +++ b/packages/client/src/pages/admin/object-storage.vue @@ -75,7 +75,7 @@ import FormSplit from '@/components/form/split.vue'; import FormSection from '@/components/form/section.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -151,7 +151,7 @@ export default defineComponent({ objectStorageSetPublicRead: this.objectStorageSetPublicRead, objectStorageS3ForcePathStyle: this.objectStorageS3ForcePathStyle, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/other-settings.vue b/packages/client/src/pages/admin/other-settings.vue index 6b588e88a..abf420b15 100644 --- a/packages/client/src/pages/admin/other-settings.vue +++ b/packages/client/src/pages/admin/other-settings.vue @@ -14,7 +14,7 @@ import FormSection from '@/components/form/section.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -49,7 +49,7 @@ export default defineComponent({ save() { os.apiWithDialog('admin/update-meta', { }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/proxy-account.vue b/packages/client/src/pages/admin/proxy-account.vue index 5c4fbffa0..4a2b22d2a 100644 --- a/packages/client/src/pages/admin/proxy-account.vue +++ b/packages/client/src/pages/admin/proxy-account.vue @@ -20,7 +20,7 @@ import MkInfo from '@/components/ui/info.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -65,7 +65,7 @@ export default defineComponent({ os.apiWithDialog('admin/update-meta', { proxyAccountId: this.proxyAccountId, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/security.vue b/packages/client/src/pages/admin/security.vue index d06989164..af5f45865 100644 --- a/packages/client/src/pages/admin/security.vue +++ b/packages/client/src/pages/admin/security.vue @@ -41,7 +41,7 @@ import FormButton from '@/components/ui/button.vue'; import XBotProtection from './bot-protection.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -82,7 +82,7 @@ export default defineComponent({ os.apiWithDialog('admin/update-meta', { summalyProxy: this.summalyProxy, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/admin/settings.vue b/packages/client/src/pages/admin/settings.vue index 5cf4d6c88..84462c7e8 100644 --- a/packages/client/src/pages/admin/settings.vue +++ b/packages/client/src/pages/admin/settings.vue @@ -139,7 +139,7 @@ import FormSplit from '@/components/form/split.vue'; import FormSuspense from '@/components/form/suspense.vue'; import * as os from '@/os'; import * as symbols from '@/symbols'; -import { fetchInstance } from '@/instance'; +import { refetchInstanceMeta } from '@/instance'; export default defineComponent({ components: { @@ -244,7 +244,7 @@ export default defineComponent({ deeplAuthKey: this.deeplAuthKey, deeplIsPro: this.deeplIsPro, }).then(() => { - fetchInstance(); + refetchInstanceMeta(); }); } } diff --git a/packages/client/src/pages/settings/theme.vue b/packages/client/src/pages/settings/theme.vue index 3e4ec1b2a..72b7e6917 100644 --- a/packages/client/src/pages/settings/theme.vue +++ b/packages/client/src/pages/settings/theme.vue @@ -123,8 +123,8 @@ export default defineComponent({ const installedThemes = ref(getThemes()); const themes = computed(() => builtinThemes.concat(installedThemes.value)); - const darkThemes = computed(() => themes.value.filter(t => t.base == 'dark' || t.kind == 'dark')); - const lightThemes = computed(() => themes.value.filter(t => t.base == 'light' || t.kind == 'light')); + const darkThemes = computed(() => themes.value.filter(t => t.base === 'dark' || t.kind === 'dark')); + const lightThemes = computed(() => themes.value.filter(t => t.base === 'light' || t.kind === 'light')); const darkTheme = ColdDeviceStorage.ref('darkTheme'); const darkThemeId = computed({ get() {