diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts index f2af951d63..800a3b079f 100644 --- a/packages/frontend/src/boot/main-boot.ts +++ b/packages/frontend/src/boot/main-boot.ts @@ -8,7 +8,7 @@ import { common } from './common.js'; import { version, ui, lang, updateLocale } from '@/config.js'; import { i18n, updateI18n } from '@/i18n.js'; import { confirm, alert, post, popup, toast } from '@/os.js'; -import { useStream } from '@/stream.js'; +import { useStream, isReloading } from '@/stream.js'; import * as sound from '@/scripts/sound.js'; import { $i, refreshAccount, login, updateAccount, signout } from '@/account.js'; import { defaultStore, ColdDeviceStorage } from '@/store.js'; @@ -39,6 +39,7 @@ export async function mainBoot() { let reloadDialogShowing = false; stream.on('_disconnected_', async () => { + if (isReloading) return; if (defaultStore.state.serverDisconnectedBehavior === 'reload') { location.reload(); } else if (defaultStore.state.serverDisconnectedBehavior === 'dialog') { diff --git a/packages/frontend/src/stream.ts b/packages/frontend/src/stream.ts index 912bbb28a4..d08d1c0d22 100644 --- a/packages/frontend/src/stream.ts +++ b/packages/frontend/src/stream.ts @@ -11,6 +11,8 @@ import { url } from '@/config.js'; let stream: Misskey.Stream | null = null; let timeoutHeadBeat: number | null = null; +export let isReloading: boolean = false; + export function useStream(): Misskey.Stream { if (stream) return stream; @@ -26,11 +28,14 @@ export function useStream(): Misskey.Stream { export function reloadStream() { if (!stream) return useStream(); if (timeoutHeadBeat) window.clearTimeout(timeoutHeadBeat); + isReloading = true; stream.close(); + stream.once('_connected_', () => isReloading = false); stream.stream.reconnect(); timeoutHeadBeat = window.setTimeout(heartbeat, 1000 * 60); + return stream; } diff --git a/packages/frontend/src/ui/_common_/stream-indicator.vue b/packages/frontend/src/ui/_common_/stream-indicator.vue index b09221f5d2..c3107b4e40 100644 --- a/packages/frontend/src/ui/_common_/stream-indicator.vue +++ b/packages/frontend/src/ui/_common_/stream-indicator.vue @@ -15,7 +15,7 @@ SPDX-License-Identifier: AGPL-3.0-only