From b9e6e16ce91a2aab173c0ed6c85a0a0ef1477a55 Mon Sep 17 00:00:00 2001 From: Patrick Kan <55383971+patrickkfkan@users.noreply.github.com> Date: Tue, 30 Aug 2022 16:11:14 +0800 Subject: [PATCH] feat: add `MusicVisualHeader` (#157) --- src/parser/classes/MusicVisualHeader.ts | 25 +++++++++++++++++++++++++ src/parser/map.ts | 2 ++ src/parser/ytmusic/Artist.ts | 3 ++- 3 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 src/parser/classes/MusicVisualHeader.ts diff --git a/src/parser/classes/MusicVisualHeader.ts b/src/parser/classes/MusicVisualHeader.ts new file mode 100644 index 00000000..1deedb44 --- /dev/null +++ b/src/parser/classes/MusicVisualHeader.ts @@ -0,0 +1,25 @@ +import Parser from '../index'; +import { YTNode } from '../helpers'; +import Text from './misc/Text'; +import Thumbnail from './misc/Thumbnail'; +import Menu from './menus/Menu'; + +class MusicVisualHeader extends YTNode { + static type = 'MusicVisualHeader'; + + title; + thumbnails; + menu; + foreground_thumbnails; + + constructor(data: any) { + super(); + + this.title = new Text(data.title); + this.thumbnails = data.thumbnail ? Thumbnail.fromResponse(data.thumbnail.musicThumbnailRenderer?.thumbnail) : []; + this.menu = Parser.parseItem(data.menu, Menu); + this.foreground_thumbnails = data.foregroundThumbnail ? Thumbnail.fromResponse(data.foregroundThumbnail.musicThumbnailRenderer?.thumbnail) : []; + } +} + +export default MusicVisualHeader; \ No newline at end of file diff --git a/src/parser/map.ts b/src/parser/map.ts index a0a96b7b..d39ee9eb 100644 --- a/src/parser/map.ts +++ b/src/parser/map.ts @@ -162,6 +162,7 @@ import { default as MusicSideAlignedItem } from './classes/MusicSideAlignedItem' import { default as MusicSortFilterButton } from './classes/MusicSortFilterButton'; import { default as MusicThumbnail } from './classes/MusicThumbnail'; import { default as MusicTwoRowItem } from './classes/MusicTwoRowItem'; +import { default as MusicVisualHeader } from './classes/MusicVisualHeader'; import { default as NavigationEndpoint } from './classes/NavigationEndpoint'; import { default as Notification } from './classes/Notification'; import { default as PageIntroduction } from './classes/PageIntroduction'; @@ -422,6 +423,7 @@ const map: Record = { MusicSortFilterButton, MusicThumbnail, MusicTwoRowItem, + MusicVisualHeader, NavigationEndpoint, Notification, PageIntroduction, diff --git a/src/parser/ytmusic/Artist.ts b/src/parser/ytmusic/Artist.ts index c33137c3..41222657 100644 --- a/src/parser/ytmusic/Artist.ts +++ b/src/parser/ytmusic/Artist.ts @@ -6,6 +6,7 @@ import MusicShelf from '../classes/MusicShelf'; import MusicCarouselShelf from '../classes/MusicCarouselShelf'; import MusicPlaylistShelf from '../classes/MusicPlaylistShelf'; import MusicImmersiveHeader from '../classes/MusicImmersiveHeader'; +import MusicVisualHeader from '../classes/MusicVisualHeader'; class Artist { #page; @@ -18,7 +19,7 @@ class Artist { this.#page = Parser.parseResponse((response as AxioslikeResponse).data); this.#actions = actions; - this.header = this.page.header.item().as(MusicImmersiveHeader); + this.header = this.page.header.item().as(MusicImmersiveHeader, MusicVisualHeader); const music_shelf = this.#page.contents_memo.get('MusicShelf') as MusicShelf[] || []; const music_carousel_shelf = this.#page.contents_memo.get('MusicCarouselShelf') as MusicCarouselShelf[] || [];