From 6311b90b215f4f440893ad255fa8396c17717b1f Mon Sep 17 00:00:00 2001 From: Mattias Thall Date: Tue, 26 May 2026 21:25:41 +0200 Subject: [PATCH] Simplify CC dropdown: downloaded langs at top, YouTube langs below MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Single CC chip shows downloaded langs inline. One click opens a dropdown with optgroups — already-on-disk at top, YouTube-available below loading async. No re-download needed to select an already-downloaded lang. Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/pages/Watch.jsx | 60 +++++++++++++++--------------------- 1 file changed, 24 insertions(+), 36 deletions(-) diff --git a/frontend/src/pages/Watch.jsx b/frontend/src/pages/Watch.jsx index 24f5f6f..efaa861 100644 --- a/frontend/src/pages/Watch.jsx +++ b/frontend/src/pages/Watch.jsx @@ -671,8 +671,8 @@ export default function Watch() { const { data: subtitleFiles = [] } = useQuery({ queryKey: ["subtitle-files", youtubeVideoId], queryFn: () => getSubtitleFiles(youtubeVideoId).then(r => r.data), - enabled: fileReady, - staleTime: Infinity, + enabled: !!youtubeVideoId, + staleTime: 60_000, }); const { data: dlStatus } = useQuery({ @@ -995,41 +995,22 @@ export default function Watch() { )} {(() => { - // Subs already on disk → show langs + "+" to add more - if (subtitleFiles.length > 0 && !subsRequested) return ( -
- - CC: {subtitleFiles.map(s => s.lang).join(", ")} - - -
- ); - // Not yet asked → show CC chip + const onDisk = subtitleFiles.map(s => s.lang); + const onDiskSet = new Set(onDisk); + if (!subsRequested) return ( ); - // Loading YouTube subtitle list - if (subsLoading) return ( - - - CC - - ); - const manual = new Set(availableSubs?.manual ?? []); - const auto = (availableSubs?.auto ?? []).filter(l => !manual.has(l)); - if (!manual.size && !auto.length) return ( - No CC - ); + + const ytManual = (availableSubs?.manual ?? []).filter(l => !onDiskSet.has(l)); + const ytAuto = (availableSubs?.auto ?? []).filter(l => !onDiskSet.has(l) && !ytManual.includes(l)); + const needsDownload = selectedSubLang && !onDiskSet.has(selectedSubLang); + return ( <> - {dlComplete && selectedSubLang && ( + {dlComplete && needsDownload && ( )}