From f3d77b3e97e498f31630b05dbf381fdc0d53580e Mon Sep 17 00:00:00 2001 From: Patrick Kan <55383971+patrickkfkan@users.noreply.github.com> Date: Tue, 23 Aug 2022 03:46:52 +0800 Subject: [PATCH] Add `end_icons` to `MusicCarouselShelfBasicHeader` and fix `music#getPlaylist()` (#149) * ft: add end_icons to MusicCarouselShelfBasicHeader * fix: `music#getPlaylist()` breaking playlist_id --- src/core/Music.ts | 5 +++- src/parser/classes/IconLink.ts | 25 +++++++++++++++++++ .../classes/MusicCarouselShelfBasicHeader.ts | 6 +++++ src/parser/map.ts | 2 ++ 4 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 src/parser/classes/IconLink.ts diff --git a/src/core/Music.ts b/src/core/Music.ts index 9fb52915..0d83b266 100644 --- a/src/core/Music.ts +++ b/src/core/Music.ts @@ -113,7 +113,10 @@ class Music { async getPlaylist(playlist_id: string) { throwIfMissing({ playlist_id }); - const response = await this.#actions.browse(`VL${playlist_id.replace(/VL/g, '')}`, { client: 'YTMUSIC' }); + if (!playlist_id.startsWith('VL')) { + playlist_id = `VL${playlist_id}`; + } + const response = await this.#actions.browse(playlist_id, { client: 'YTMUSIC' }); return new Playlist(response, this.#actions); } diff --git a/src/parser/classes/IconLink.ts b/src/parser/classes/IconLink.ts new file mode 100644 index 00000000..5deae9ac --- /dev/null +++ b/src/parser/classes/IconLink.ts @@ -0,0 +1,25 @@ +import Text from './misc/Text'; +import { YTNode } from '../helpers'; +import NavigationEndpoint from './NavigationEndpoint'; + +class IconLink extends YTNode { + static type = 'IconLink'; + + icon_type: string; + tooltip?: string; + endpoint: NavigationEndpoint; + + constructor(data: any) { + super(); + + this.icon_type = data.icon?.iconType; + + if (data.tooltip) { + this.tooltip = new Text(data.tooltip).toString(); + } + + this.endpoint = new NavigationEndpoint(data.navigationEndpoint); + } +} + +export default IconLink; \ No newline at end of file diff --git a/src/parser/classes/MusicCarouselShelfBasicHeader.ts b/src/parser/classes/MusicCarouselShelfBasicHeader.ts index 8ba9d228..0d222c58 100644 --- a/src/parser/classes/MusicCarouselShelfBasicHeader.ts +++ b/src/parser/classes/MusicCarouselShelfBasicHeader.ts @@ -3,6 +3,7 @@ import { YTNode } from '../helpers'; import MusicThumbnail from './MusicThumbnail'; import Parser from '..'; import Button from './Button'; +import IconLink from './IconLink'; class MusicCarouselShelfBasicHeader extends YTNode { static type = 'MusicCarouselShelfBasicHeader'; @@ -11,6 +12,7 @@ class MusicCarouselShelfBasicHeader extends YTNode { title: Text; thumbnail?: MusicThumbnail | null; more_content?: Button | null; + end_icons?: Array; constructor(data: any) { super(); @@ -29,6 +31,10 @@ class MusicCarouselShelfBasicHeader extends YTNode { if (data.moreContentButton) { this.more_content = Parser.parseItem