From ba1b4fd7c72a8e7354eebe6aad608335838ef8de Mon Sep 17 00:00:00 2001 From: Ajay Date: Sun, 7 Jan 2024 21:13:44 -0500 Subject: [PATCH] Fix age restricted videos sometimes not falling back to autogenerated thumbnails --- src/thumbnails/thumbnailData.ts | 36 ++++++++++++++++++----------- src/thumbnails/thumbnailRenderer.ts | 1 + 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/thumbnails/thumbnailData.ts b/src/thumbnails/thumbnailData.ts index 6ba959f..9010d61 100644 --- a/src/thumbnails/thumbnailData.ts +++ b/src/thumbnails/thumbnailData.ts @@ -38,12 +38,14 @@ interface InnerTubeFormat { mimeType: string; } + interface InnerTubeMetadataBase { duration: number | null; channelID: string | null; author: string | null; isLive: boolean | null; isUpcoming: boolean | null; + playabilityStatus?: string; } interface InnerTubeMetadata extends InnerTubeMetadataBase { @@ -71,9 +73,12 @@ export async function fetchVideoMetadata(videoID: VideoID, ignoreCache: boolean) try { const result = activeRequests[videoID] ?? (async () => { let metadata = await fetchVideoDataDesktopClient(videoID).catch(() => null); - if (!onMobile() && (!metadata || metadata.formats.length === 0)) metadata = await fetchVideoDataDesktopClient(videoID).catch(() => null); - if (metadata && metadata.formats.length > 0) { + // Don't retry for LOGIN_REQUIRED, they will never have urls + if (!onMobile() && (!metadata + || (metadata.formats.length === 0 && metadata.playabilityStatus !== "LOGIN_REQUIRED"))) metadata = await fetchVideoDataDesktopClient(videoID).catch(() => null); + + if (metadata) { let formats = metadata.formats; if (isSafari()) { formats = formats.filter((format) => format.mimeType.includes("avc")); @@ -192,6 +197,7 @@ export async function fetchVideoDataAndroidClient(videoID: VideoID): Promise