1
Fork 0
mirror of https://github.com/thegeneralist01/archivr synced 2026-07-22 03:05:32 +02:00

fix(frontend): tighten isPlaylistSource to mirror backend routing exactly

Previous fix excluded /watch but still returned true for any youtube.com
URL with a ?list= param (e.g. /shorts/xxx?list=yyy). Backend determine_source
only routes to YouTubePlaylist on /playlist?list=... and to YouTubeChannel on
/@handle, /channel/, /c/, /user/ paths — everything else is a single item.

Rewrite the HTTP block to match:
- youtube.com: pathname==='/playlist' && list param → playlist
             : /@, /channel/, /c/, /user/ → channel
             : anything else (incl. /watch&list=, /shorts?list=) → false
- music.youtube.com: pathname==='/playlist' && list param → YTM playlist
                   : /watch → single track (falls through to false)
This commit is contained in:
TheGeneralist 2026-07-20 22:50:55 +02:00
parent 6717fa48cf
commit 6eef53ee3a
Signed by: thegeneralist01
SSH key fingerprint: SHA256:pp9qddbCNmVNoSjevdvQvM5z0DHN7LTa8qBMbcMq/R4
3 changed files with 9 additions and 9 deletions

View file

@ -87,17 +87,17 @@ function isPlaylistSource(locator) {
const url = new URL(l)
const host = url.hostname
if (host === 'youtube.com' || host === 'www.youtube.com' || host === 'm.youtube.com') {
// /watch?v=...&list=... is a single video backend routes it to YouTubeVideo,
// not YouTubePlaylist, regardless of the list param.
if (url.pathname === '/watch') return false
if (url.searchParams.has('list')) return true
// Mirror determine_source exactly:
// - /playlist?list=... YouTubePlaylist
// - /@handle, /channel/, /c/, /user/ YouTubeChannel
// - everything else (incl. /watch&list=, /shorts?list=) NOT a playlist
if (url.pathname === '/playlist' && url.searchParams.has('list')) return true
if (url.pathname.startsWith('/@') || url.pathname.startsWith('/channel/') ||
url.pathname.startsWith('/c/') || url.pathname.startsWith('/user/')) return true
}
if (host === 'music.youtube.com') {
// /watch is a single track even if it has a list param
if (url.pathname === '/watch') return false
if (url.pathname.startsWith('/playlist') || url.searchParams.has('list')) return true
// /watch is a single YTM track; only /playlist?list=... is a YTM playlist
if (url.pathname === '/playlist' && url.searchParams.has('list')) return true
}
} catch {}
}