summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/frontend/src/pages/reversi/game.vue22
1 files changed, 22 insertions, 0 deletions
diff --git a/packages/frontend/src/pages/reversi/game.vue b/packages/frontend/src/pages/reversi/game.vue
index 85ad58ac6a..8c924e3d61 100644
--- a/packages/frontend/src/pages/reversi/game.vue
+++ b/packages/frontend/src/pages/reversi/game.vue
@@ -21,6 +21,7 @@ import { signinRequired } from '@/account.js';
import { useRouter } from '@/global/router/supplier.js';
import * as os from '@/os.js';
import { i18n } from '@/i18n.js';
+import { useInterval } from '@/scripts/use-interval.js';
const $i = signinRequired();
@@ -39,6 +40,8 @@ watch(() => props.gameId, () => {
});
function start(_game: Misskey.entities.ReversiGameDetailed) {
+ if (game.value?.isStarted) return;
+
if (shareWhenStart.value) {
misskeyApi('notes/create', {
text: i18n.ts._reversi.iStartedAGame + '\n' + location.href,
@@ -81,6 +84,25 @@ async function fetchGame() {
}
}
+// 通信を取りこぼした場合の救済
+useInterval(async () => {
+ if (game.value == null) return;
+ if (game.value.isStarted) return;
+
+ const _game = await misskeyApi('reversi/show-game', {
+ gameId: props.gameId,
+ });
+
+ if (_game.isStarted) {
+ start(_game);
+ } else {
+ game.value = _game;
+ }
+}, 1000 * 10, {
+ immediate: false,
+ afterMounted: true,
+});
+
onMounted(() => {
fetchGame();
});