From 555817e2f56112a4bc0a6838862a4f8ee3af1d5e Mon Sep 17 00:00:00 2001 From: Suffocate <70031311+lolsuffocate@users.noreply.github.com> Date: Sat, 6 Sep 2025 01:12:24 +0100 Subject: [PATCH] feat(downloader): Add context menu button for playlists and albums (#3768) Co-authored-by: JellyBrick --- src/plugins/downloader/renderer.tsx | 7 +++++-- src/plugins/utils/renderer/check.ts | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/plugins/downloader/renderer.tsx b/src/plugins/downloader/renderer.tsx index 8b4d5817..9ca5abf2 100644 --- a/src/plugins/downloader/renderer.tsx +++ b/src/plugins/downloader/renderer.tsx @@ -6,7 +6,10 @@ import defaultConfig from '@/config/defaults'; import { getSongMenu } from '@/providers/dom-elements'; import { getSongInfo } from '@/providers/song-info-front'; import { t } from '@/i18n'; -import { isMusicOrVideoTrack } from '@/plugins/utils/renderer/check'; +import { + isAlbumOrPlaylist, + isMusicOrVideoTrack, +} from '@/plugins/utils/renderer/check'; import { DownloadButton } from './templates/download'; @@ -25,7 +28,7 @@ const menuObserver = new MutationObserver(() => { if ( !menu || menu.contains(buttonContainer) || - !isMusicOrVideoTrack() || + !(isMusicOrVideoTrack() || isAlbumOrPlaylist()) || !buttonContainer ) { return; diff --git a/src/plugins/utils/renderer/check.ts b/src/plugins/utils/renderer/check.ts index 99f08f46..563c054b 100644 --- a/src/plugins/utils/renderer/check.ts +++ b/src/plugins/utils/renderer/check.ts @@ -22,6 +22,24 @@ export const isMusicOrVideoTrack = () => { return false; }; +export const isAlbumOrPlaylist = () => { + for (const menuSelector of document.querySelectorAll< + HTMLAnchorElement & { + data: { + addToPlaylistEndpoint: { + playlistId: string; + }; + clickTrackingParams: string; + }; + } + >('tp-yt-paper-listbox #navigation-endpoint')) { + if (menuSelector?.data?.addToPlaylistEndpoint?.playlistId) { + return true; + } + } + return false; +}; + export const isPlayerMenu = (menu?: HTMLElement | null) => { return ( menu?.parentElement as