From 3a359f6c5ed1041be096152088eccdb8f2e0c72b Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 25 May 2026 12:43:37 -0400 Subject: [PATCH] =?UTF-8?q?fix(ui):=20Quick=20scan=20button=20always=20vis?= =?UTF-8?q?ible=20(disabled=20when=20active=20batch=20present)=20+=20inlin?= =?UTF-8?q?e=20Clear=20stuck=20action=20=E2=80=94=20operator=20was=20click?= =?UTF-8?q?ing=20a=20spinner=20area=20thinking=20it=20was=20the=20button?= =?UTF-8?q?=20because=20activeBatch=20hid=20the=20Quick=20scan=20button=20?= =?UTF-8?q?entirely?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.7 (1M context) --- .../settings/ImportTriggerPanel.vue | 56 +++++++++++++++---- 1 file changed, 44 insertions(+), 12 deletions(-) diff --git a/frontend/src/components/settings/ImportTriggerPanel.vue b/frontend/src/components/settings/ImportTriggerPanel.vue index 232df86..957aaf6 100644 --- a/frontend/src/components/settings/ImportTriggerPanel.vue +++ b/frontend/src/components/settings/ImportTriggerPanel.vue @@ -2,7 +2,7 @@ Trigger scan -
+
@@ -13,20 +13,40 @@ failed {{ store.activeBatch.failed }} / {{ store.activeBatch.total_files }} files + + + Clear stuck +
-
-

+ +

+ Run a quick scan of the import directory. Deep scan (pHash dedup, archives) lands in FC-2d. -

- - mdi-magnify-scan - Quick scan - - - {{ store.triggerError }} - -
+ + + An active batch is in progress. Wait for it to finish, or click + Clear stuck above if it has been wedged with no + measurable progress. + +

+ + + mdi-magnify-scan + Quick scan + + + + {{ store.triggerError }} + @@ -37,9 +57,21 @@ import { useImportStore } from '../../stores/import.js' const store = useImportStore() const busy = ref(false) +const clearing = ref(false) async function trigger() { busy.value = true try { await store.triggerScan() } catch {} finally { busy.value = false } } + +async function onClearStuck() { + clearing.value = true + try { + await store.clearStuck() + } catch { + // store surfaces error via triggerError if needed + } finally { + clearing.value = false + } +}