From c8e1103bf4d79e849a4395894c42db66f80ec8b6 Mon Sep 17 00:00:00 2001 From: FTCHD <144691102+FTCHD@users.noreply.github.com> Date: Wed, 15 Jul 2026 21:24:53 +0300 Subject: [PATCH] limit open dialogs --- lib/rclone/client.ts | 2 ++ store/memory.ts | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/rclone/client.ts b/lib/rclone/client.ts index 20b7ed6..80eb209 100644 --- a/lib/rclone/client.ts +++ b/lib/rclone/client.ts @@ -10,6 +10,7 @@ import createRCDClient, { type OpenApiRequiredKeysOf, type RCDClient, } from 'rclone-sdk' +import { claimReconnectDialog } from '../../store/memory' import { selectCurrentHost, usePersistedStore } from '../../store/persisted' import { UserCancelledError } from '../errors' @@ -21,6 +22,7 @@ async function handleReconnectIfNeeded(errorMessage: string) { const match = errorMessage.match(RE_RECONNECT) if (!match) return false const remoteName = match[1] + if (!claimReconnectDialog(remoteName)) return true const confirmed = await ask( `Remote "${remoteName}" needs to be reconnected. This usually means the authentication token has expired.\n\nWould you like to reconnect now?`, { diff --git a/store/memory.ts b/store/memory.ts index 1d3185b..1adb41b 100644 --- a/store/memory.ts +++ b/store/memory.ts @@ -37,6 +37,8 @@ interface State { dryRunJobIds: number[] watchedJobs: Record + + reconnectDialogsShown: string[] } export const useStore = create()( @@ -53,7 +55,21 @@ export const useStore = create()( dryRunJobIds: [], watchedJobs: {}, + + reconnectDialogsShown: [], }), { name: 'shared-store' } ) ) + +export function claimReconnectDialog(remoteName: string): boolean { + let claimed = false + + useStore.setState((state) => { + if (state.reconnectDialogsShown.includes(remoteName)) return state + claimed = true + return { reconnectDialogsShown: [...state.reconnectDialogsShown, remoteName] } + }) + + return claimed +}