From 5fba327d249ff9dcacd814627b8c9ce020f3650f Mon Sep 17 00:00:00 2001 From: npeter83 Date: Mon, 15 Jun 2026 04:23:49 +0200 Subject: [PATCH 1/2] improvement(channels): distinct label for full-history queued by another user The channel manager already styled the two deep-backfill-pending states differently (solid clickable chip when you requested full history vs a faint outline when another subscriber did), but both used the same "full history queued" label, so a channel queued by someone else looked identical to one you queued yourself. Give the by-other case its own label ("full history coming") so the distinction is legible at a glance, not just on hover. Trilingual. --- frontend/src/components/Channels.tsx | 2 +- frontend/src/i18n/locales/de/channels.json | 1 + frontend/src/i18n/locales/en/channels.json | 1 + frontend/src/i18n/locales/hu/channels.json | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/Channels.tsx b/frontend/src/components/Channels.tsx index 32f4785..2e32004 100644 --- a/frontend/src/components/Channels.tsx +++ b/frontend/src/components/Channels.tsx @@ -444,7 +444,7 @@ function ChannelRow({ - {t("channels.row.fullHistoryQueued")} + {t("channels.row.fullHistoryComing")} ) : ( diff --git a/frontend/src/i18n/locales/de/channels.json b/frontend/src/i18n/locales/de/channels.json index e317808..8638c94 100644 --- a/frontend/src/i18n/locales/de/channels.json +++ b/frontend/src/i18n/locales/de/channels.json @@ -45,6 +45,7 @@ "full": "vollständig", "fullHint": "Vollständiger Verlauf geladen.", "fullHistoryQueued": "vollständiger Verlauf in Warteschlange", + "fullHistoryComing": "vollständiger Verlauf unterwegs", "queuedRequestedHint": "Vollständiger Verlauf angefordert — der gesamte Katalog dieses Kanals wird nachgeladen, soweit das gemeinsame Kontingent es zulässt. Klicke, um deine Anforderung abzubrechen.", "queuedByOtherHint": "Ein anderer Abonnent hat den vollständigen Verlauf dieses Kanals bereits angefordert, sein gesamter Katalog ist also für alle unterwegs — hier gibt es nichts zu tun.", "getFullHistory": "vollständigen Verlauf laden", diff --git a/frontend/src/i18n/locales/en/channels.json b/frontend/src/i18n/locales/en/channels.json index 3fbbb72..9ecd280 100644 --- a/frontend/src/i18n/locales/en/channels.json +++ b/frontend/src/i18n/locales/en/channels.json @@ -45,6 +45,7 @@ "full": "full", "fullHint": "Full history fetched.", "fullHistoryQueued": "full history queued", + "fullHistoryComing": "full history coming", "queuedRequestedHint": "Full history requested — this channel's whole back-catalog will backfill as the shared quota allows. Click to cancel your request.", "queuedByOtherHint": "Another subscriber already requested this channel's full history, so its whole back-catalog is on its way to everyone — nothing to do here.", "getFullHistory": "get full history", diff --git a/frontend/src/i18n/locales/hu/channels.json b/frontend/src/i18n/locales/hu/channels.json index 6767ed4..30904eb 100644 --- a/frontend/src/i18n/locales/hu/channels.json +++ b/frontend/src/i18n/locales/hu/channels.json @@ -45,6 +45,7 @@ "full": "teljes", "fullHint": "Teljes előzmény letöltve.", "fullHistoryQueued": "teljes előzmény sorban", + "fullHistoryComing": "teljes előzmény úton", "queuedRequestedHint": "Teljes előzmény kérve — a csatorna teljes archívuma letöltődik, ahogy a megosztott kvóta engedi. Kattints a kérés visszavonásához.", "queuedByOtherHint": "Egy másik feliratkozó már kérte ennek a csatornának a teljes előzményét, így a teljes archívuma már úton van mindenkihez — itt nincs teendőd.", "getFullHistory": "teljes előzmény lekérése", From cb35b0e86effa9f9bda780157039a6e6df21f11e Mon Sep 17 00:00:00 2001 From: npeter83 Date: Mon, 15 Jun 2026 04:30:27 +0200 Subject: [PATCH 2/2] 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) && (