From 99b963dbe63e5feb5f1bdcb1b04389e6138a80b0 Mon Sep 17 00:00:00 2001 From: npeter83 Date: Mon, 15 Jun 2026 04:30:27 +0200 Subject: [PATCH] improvement(sync): reflect deep backfill as active in the header status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The header status only considered recent-sync pending, so it read "all synced" while the scheduler was still backfilling full history — directly contradicting the adjacent "N without full history" notice. Add an active "fetching history" state (spinner) shown when recent sync is done but deep backfill is still pending, so "all synced" appears only when nothing is pending at all. The admin pause button now also shows during deep backfill (it's pausable work). Trilingual. --- frontend/src/components/SyncStatus.tsx | 14 +++++++++++--- frontend/src/i18n/locales/de/header.json | 1 + frontend/src/i18n/locales/en/header.json | 1 + frontend/src/i18n/locales/hu/header.json | 1 + 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frontend/src/components/SyncStatus.tsx b/frontend/src/components/SyncStatus.tsx index 447238e..2e5c368 100644 --- a/frontend/src/components/SyncStatus.tsx +++ b/frontend/src/components/SyncStatus.tsx @@ -57,6 +57,13 @@ export default function SyncStatus({ {t("header.sync.syncing", { count: syncing })} + ) : notFull > 0 ? ( + // Recent uploads are in, but the scheduler is still backfilling full history — + // so "all synced" would be misleading. Reflect the deep work as active. + + + {t("header.sync.backfillingHistory")} + ) : ( {t("header.sync.allSynced")} )} @@ -74,9 +81,10 @@ export default function SyncStatus({ )} - {/* Pause only makes sense when there's work to pause; Resume must always show - while paused so it can be lifted. Hidden entirely when idle and not paused. */} - {isAdmin && (data.paused || syncing > 0) && ( + {/* Pause only makes sense when there's work to pause (recent OR deep backfill); + Resume must always show while paused so it can be lifted. Hidden entirely when + idle and not paused. */} + {isAdmin && (data.paused || syncing > 0 || notFull > 0) && (