Make subtitle availability check lazy (user-triggered, not on page load)
Auto-fetching on every watch page load spawned a yt-dlp process per visit which could hang and pile up. CC button now triggers the check on demand. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -660,11 +660,13 @@ export default function Watch() {
|
|||||||
staleTime: sidebarMode === "random" ? 0 : 5 * 60_000,
|
staleTime: sidebarMode === "random" ? 0 : 5 * 60_000,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const [subsRequested, setSubsRequested] = useState(false);
|
||||||
|
useEffect(() => { setSubsRequested(false); setSelectedSubLang(""); }, [youtubeVideoId]);
|
||||||
const { data: availableSubs, isLoading: subsLoading } = useQuery({
|
const { data: availableSubs, isLoading: subsLoading } = useQuery({
|
||||||
queryKey: ["available-subs", youtubeVideoId],
|
queryKey: ["available-subs", youtubeVideoId],
|
||||||
queryFn: () => getAvailableSubs(youtubeVideoId).then(r => r.data),
|
queryFn: () => getAvailableSubs(youtubeVideoId).then(r => r.data),
|
||||||
enabled: !!youtubeVideoId,
|
enabled: subsRequested && !!youtubeVideoId,
|
||||||
staleTime: 10 * 60_000,
|
staleTime: 30 * 60_000,
|
||||||
});
|
});
|
||||||
|
|
||||||
const { data: dlStatus } = useQuery({
|
const { data: dlStatus } = useQuery({
|
||||||
@@ -967,16 +969,26 @@ export default function Watch() {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{!dlComplete && (() => {
|
{!dlComplete && (() => {
|
||||||
const manual = new Set(availableSubs?.manual ?? []);
|
if (!subsRequested) return (
|
||||||
const auto = (availableSubs?.auto ?? []).filter(l => !manual.has(l));
|
<button
|
||||||
const allLangs = [...manual, ...auto];
|
onClick={() => setSubsRequested(true)}
|
||||||
|
className="flex items-center gap-1 px-3 py-1.5 rounded-full text-xs font-medium bg-zinc-800 text-zinc-400 hover:bg-zinc-700 transition-colors"
|
||||||
|
title="Check available subtitles"
|
||||||
|
>
|
||||||
|
CC
|
||||||
|
</button>
|
||||||
|
);
|
||||||
if (subsLoading) return (
|
if (subsLoading) return (
|
||||||
<span className="flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-zinc-800 text-zinc-500 text-xs">
|
<span className="flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-zinc-800 text-zinc-500 text-xs">
|
||||||
<span className="w-3 h-3 border border-zinc-600 border-t-transparent rounded-full animate-spin inline-block" />
|
<span className="w-3 h-3 border border-zinc-600 border-t-transparent rounded-full animate-spin inline-block" />
|
||||||
CC
|
CC
|
||||||
</span>
|
</span>
|
||||||
);
|
);
|
||||||
if (!allLangs.length) return null;
|
const manual = new Set(availableSubs?.manual ?? []);
|
||||||
|
const auto = (availableSubs?.auto ?? []).filter(l => !manual.has(l));
|
||||||
|
if (!manual.size && !auto.length) return (
|
||||||
|
<span className="px-3 py-1.5 rounded-full bg-zinc-800 text-zinc-600 text-xs">No CC</span>
|
||||||
|
);
|
||||||
return (
|
return (
|
||||||
<select
|
<select
|
||||||
value={selectedSubLang}
|
value={selectedSubLang}
|
||||||
|
|||||||
Reference in New Issue
Block a user