From c8173c88e0e17ec4bb4e93af1867c55d07611cc0 Mon Sep 17 00:00:00 2001 From: Luan Date: Tue, 10 Dec 2024 13:49:51 -0300 Subject: [PATCH] feat(parser): Add `PlaylistThumbnailOverlay` --- src/parser/classes/PlaylistThumbnailOverlay.ts | 17 +++++++++++++++++ src/parser/classes/Video.ts | 5 +++++ src/parser/classes/VideoCard.ts | 12 ++++++++---- src/parser/classes/menus/Menu.ts | 5 +++-- src/parser/nodes.ts | 1 + 5 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 src/parser/classes/PlaylistThumbnailOverlay.ts diff --git a/src/parser/classes/PlaylistThumbnailOverlay.ts b/src/parser/classes/PlaylistThumbnailOverlay.ts new file mode 100644 index 00000000..56a75212 --- /dev/null +++ b/src/parser/classes/PlaylistThumbnailOverlay.ts @@ -0,0 +1,17 @@ +import { YTNode } from '../helpers.js'; +import { type RawNode } from '../index.js'; +import Text from './misc/Text.js'; + +export default class PlaylistThumbnailOverlay extends YTNode { + static type = 'PlaylistThumbnailOverlay'; + + public icon_type?: string; + public text: Text; + + constructor(data: RawNode) { + super(); + if (Reflect.has(data, 'icon')) + this.icon_type = data.icon.iconType; + this.text = new Text(data.text); + } +} \ No newline at end of file diff --git a/src/parser/classes/Video.ts b/src/parser/classes/Video.ts index 70022ef9..428c1455 100644 --- a/src/parser/classes/Video.ts +++ b/src/parser/classes/Video.ts @@ -38,6 +38,7 @@ export default class Video extends YTNode { show_action_menu: boolean; is_watched: boolean; menu: Menu | null; + byline_text?: Text; search_video_result_entity_key?: string; constructor(data: RawNode) { @@ -91,6 +92,10 @@ export default class Video extends YTNode { if (Reflect.has(data, 'searchVideoResultEntityKey')) { this.search_video_result_entity_key = data.searchVideoResultEntityKey; } + + if (Reflect.has(data, 'bylineText')) { + this.byline_text = new Text(data.bylineText); + } } get description(): string { diff --git a/src/parser/classes/VideoCard.ts b/src/parser/classes/VideoCard.ts index 2950a967..40662c2e 100644 --- a/src/parser/classes/VideoCard.ts +++ b/src/parser/classes/VideoCard.ts @@ -5,16 +5,20 @@ import Video from './Video.js'; export default class VideoCard extends Video { static type = 'VideoCard'; + + public metadata_text?: Text; + public byline_text?: Text; constructor(data: RawNode) { super(data); if (Reflect.has(data, 'metadataText')) { - const metadata = new Text(data.metadataText); - if (metadata.text) { - this.short_view_count = new Text({ simpleText: metadata.text.split('·')[0].trim() } as RawNode); - this.published = new Text({ simpleText: metadata.text.split('·')[1].trim() } as RawNode); + this.metadata_text = new Text(data.metadataText); + if (this.metadata_text.text) { + this.short_view_count = new Text({ simpleText: this.metadata_text.text.split('·')[0]?.trim() } as RawNode); + this.published = new Text({ simpleText: this.metadata_text.text.split('·')[1]?.trim() } as RawNode); } } + if (Reflect.has(data, 'bylineText')) { this.author = new Author(data.bylineText, data.ownerBadges, data.channelThumbnailSupportedRenderers?.channelThumbnailWithLinkRenderer?.thumbnail); } diff --git a/src/parser/classes/menus/Menu.ts b/src/parser/classes/menus/Menu.ts index 08dd7c2a..f0c2e75f 100644 --- a/src/parser/classes/menus/Menu.ts +++ b/src/parser/classes/menus/Menu.ts @@ -8,20 +8,21 @@ import SegmentedLikeDislikeButtonView from '../SegmentedLikeDislikeButtonView.js import MenuFlexibleItem from './MenuFlexibleItem.js'; import LikeButton from '../LikeButton.js'; import ToggleButton from '../ToggleButton.js'; +import FlexibleActionsView from '../FlexibleActionsView.js'; export default class Menu extends YTNode { static type = 'Menu'; public items: ObservedArray; public flexible_items: ObservedArray; - public top_level_buttons: ObservedArray; + public top_level_buttons: ObservedArray; public label?: string; constructor(data: RawNode) { super(); this.items = Parser.parseArray(data.items); this.flexible_items = Parser.parseArray(data.flexibleItems, MenuFlexibleItem); - this.top_level_buttons = Parser.parseArray(data.topLevelButtons, [ ToggleButton, LikeButton, Button, ButtonView, SegmentedLikeDislikeButtonView ]); + this.top_level_buttons = Parser.parseArray(data.topLevelButtons, [ ToggleButton, LikeButton, Button, ButtonView, SegmentedLikeDislikeButtonView, FlexibleActionsView ]); if (Reflect.has(data, 'accessibility') && Reflect.has(data.accessibility, 'accessibilityData')) { this.label = data.accessibility.accessibilityData.label; diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index 06586753..56e3e3c1 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -361,6 +361,7 @@ export { default as PlaylistPanelVideoWrapper } from './classes/PlaylistPanelVid export { default as PlaylistSidebar } from './classes/PlaylistSidebar.js'; export { default as PlaylistSidebarPrimaryInfo } from './classes/PlaylistSidebarPrimaryInfo.js'; export { default as PlaylistSidebarSecondaryInfo } from './classes/PlaylistSidebarSecondaryInfo.js'; +export { default as PlaylistThumbnailOverlay } from './classes/PlaylistThumbnailOverlay.js'; export { default as PlaylistVideo } from './classes/PlaylistVideo.js'; export { default as PlaylistVideoList } from './classes/PlaylistVideoList.js'; export { default as PlaylistVideoThumbnail } from './classes/PlaylistVideoThumbnail.js';