From 9d9ba61a919ab9ecc2186a144dd4a4e411939bcb Mon Sep 17 00:00:00 2001 From: "Tom (plebeius.eth)" Date: Wed, 5 Feb 2025 16:12:19 +0100 Subject: [PATCH] feat(post): support youtube links from Invidious instances working Invidious instances: https://docs.invidious.io/instances/ https://uptime.invidious.io/ --- src/components/embed/embed.tsx | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/components/embed/embed.tsx b/src/components/embed/embed.tsx index ce33fd2b..43f49228 100644 --- a/src/components/embed/embed.tsx +++ b/src/components/embed/embed.tsx @@ -46,26 +46,47 @@ interface EmbedComponentProps { parsedUrl: URL; } -const youtubeHosts = new Set(['youtube.com', 'www.youtube.com', 'youtu.be', 'www.youtu.be', 'm.youtube.com', 'music.youtube.com']); +const youtubeHosts = new Set([ + 'youtube.com', + 'www.youtube.com', + 'youtu.be', + 'www.youtu.be', + 'm.youtube.com', + 'music.youtube.com', + // working Invidious instances - https://docs.invidious.io/instances/ - https://uptime.invidious.io/ + 'yewtu.be', + 'inv.nadeko.net', + 'yt.artemislena.eu', + 'invidious.nerdvpn.de', +]); const YoutubeEmbed = ({ parsedUrl }: EmbedComponentProps) => { let embedSrc = ''; + const isInvidious = parsedUrl.host !== 'youtube.com' && parsedUrl.host !== 'www.youtube.com' && parsedUrl.host !== 'youtu.be' && parsedUrl.host !== 'www.youtu.be'; + if (parsedUrl.searchParams.has('list')) { const playlistId = parsedUrl.searchParams.get('list'); embedSrc = `https://www.youtube.com/embed/videoseries?list=${playlistId}`; } else { let videoId = parsedUrl.searchParams.get('v'); - if (!videoId && parsedUrl.host.includes('youtu.be')) { - videoId = parsedUrl.pathname.substring(1); + if (!videoId) { + if (parsedUrl.host.includes('youtu.be')) { + videoId = parsedUrl.pathname.substring(1); + } else if (isInvidious) { + if (parsedUrl.pathname.startsWith('/watch')) { + videoId = parsedUrl.searchParams.get('v'); + } else { + videoId = parsedUrl.pathname.split('/').pop() || null; + } + } } if (videoId) { embedSrc = `https://www.youtube.com/embed/${videoId}`; } } - if (embedSrc) { return (