From e2862ed097a7de54a1a617f55dffee52a00010fc Mon Sep 17 00:00:00 2001
From: tamaina <tamaina@hotmail.co.jp>
Date: Fri, 5 Nov 2021 00:09:13 +0900
Subject: [PATCH] =?UTF-8?q?enhane:=20=E5=AE=8C=E5=85=A8=E3=83=AD=E3=82=B0?=
 =?UTF-8?q?=E3=82=A2=E3=82=A6=E3=83=88=E6=99=82=E3=81=AB=E3=81=99=E3=81=B9?=
 =?UTF-8?q?=E3=81=A6=E3=81=AE=E3=82=BF=E3=83=96=E3=81=8C=E3=82=A6=E3=82=A7?=
 =?UTF-8?q?=E3=83=AB=E3=82=AB=E3=83=A0=E3=83=9A=E3=83=BC=E3=82=B8=E3=81=B8?=
 =?UTF-8?q?=E7=A7=BB=E5=8B=95=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?=
 =?UTF-8?q?=20(#7928)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* enhane: unison-reloadに指定したパスに移動できるように

* null

* null

* null

* add comments
---
 src/client/account.ts               |  6 ++++--
 src/client/init.ts                  |  5 ++++-
 src/client/scripts/unison-reload.ts | 13 +++++++++----
 3 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/client/account.ts b/src/client/account.ts
index a3fe082a22..a2165ebed1 100644
--- a/src/client/account.ts
+++ b/src/client/account.ts
@@ -61,7 +61,7 @@ export async function signout() {
 	document.cookie = `igi=; path=/`;
 
 	if (accounts.length > 0) login(accounts[0].token);
-	else unisonReload();
+	else unisonReload('/');
 }
 
 export async function getAccounts(): Promise<{ id: Account['id'], token: Account['token'] }[]> {
@@ -122,7 +122,9 @@ export async function login(token: Account['token'], redirect?: string) {
 	await addAccount(me.id, token);
 
 	if (redirect) {
-		reloadChannel.postMessage('reload');
+		// 他のタブは再読み込みするだけ
+		reloadChannel.postMessage(null);
+		// このページはredirectで指定された先に移動
 		location.href = redirect;
 		return;
 	}
diff --git a/src/client/init.ts b/src/client/init.ts
index 654e176398..81d17f0d27 100644
--- a/src/client/init.ts
+++ b/src/client/init.ts
@@ -93,7 +93,10 @@ if (defaultStore.state.reportError && !_DEV_) {
 document.addEventListener('touchend', () => {}, { passive: true });
 
 // 一斉リロード
-reloadChannel.addEventListener('message', () => location.reload());
+reloadChannel.addEventListener('message', path => {
+	if (path !== null) location.href = path;
+	else location.reload();
+});
 
 //#region SEE: https://css-tricks.com/the-trick-to-viewport-units-on-mobile/
 // TODO: いつの日にか消したい
diff --git a/src/client/scripts/unison-reload.ts b/src/client/scripts/unison-reload.ts
index 92556aefaa..59af584c1b 100644
--- a/src/client/scripts/unison-reload.ts
+++ b/src/client/scripts/unison-reload.ts
@@ -1,10 +1,15 @@
 // SafariがBroadcastChannel未実装なのでライブラリを使う
 import { BroadcastChannel } from 'broadcast-channel';
 
-export const reloadChannel = new BroadcastChannel<'reload'>('reload');
+export const reloadChannel = new BroadcastChannel<string | null>('reload');
 
 // BroadcastChannelを用いて、クライアントが一斉にreloadするようにします。
-export function unisonReload() {
-	reloadChannel.postMessage('reload');
-	location.reload();
+export function unisonReload(path?: string) {
+	if (path !== undefined) {
+		reloadChannel.postMessage(path);
+		location.href = path;
+	} else {
+		reloadChannel.postMessage(null);
+		location.reload();
+	}
 }