From e37f42f41b9dc884e0ef6cb57d974875c2915382 Mon Sep 17 00:00:00 2001 From: LuanRT Date: Thu, 15 Dec 2022 19:01:42 -0300 Subject: [PATCH] feat: bring back `Video#is_live` and add `ExpandableMetadata` (#256) * bring back `Video#is_live` * add ExpandableMetadata --- src/parser/classes/Button.ts | 18 +++++++--- src/parser/classes/ExpandableMetadata.ts | 41 ++++++++++++++++++++++ src/parser/classes/HorizontalCardList.ts | 3 +- src/parser/classes/MacroMarkersListItem.ts | 29 +++++++++++++++ src/parser/classes/MetadataBadge.ts | 11 ++++-- src/parser/classes/Video.ts | 37 +++++++++++++------ src/parser/map.ts | 4 +++ src/parser/youtube/Search.ts | 4 +-- 8 files changed, 127 insertions(+), 20 deletions(-) create mode 100644 src/parser/classes/ExpandableMetadata.ts create mode 100644 src/parser/classes/MacroMarkersListItem.ts diff --git a/src/parser/classes/Button.ts b/src/parser/classes/Button.ts index bbae93a3..4e962af5 100644 --- a/src/parser/classes/Button.ts +++ b/src/parser/classes/Button.ts @@ -6,17 +6,21 @@ import { YTNode } from '../helpers'; class Button extends YTNode { static type = 'Button'; - text: string; + text?: string; - label; - tooltip; - icon_type; + label?: string; + tooltip?: string; + icon_type?: string; + is_disabled?: boolean; endpoint: NavigationEndpoint; constructor(data: any) { super(); - this.text = new Text(data.text).toString(); + + if (data.text) { + this.text = new Text(data.text).toString(); + } if (data.accessibility?.label) { this.label = data.accessibility?.label; @@ -30,6 +34,10 @@ class Button extends YTNode { this.icon_type = data.icon?.iconType; } + if (Reflect.has(data, 'isDisabled')) { + this.is_disabled = data.isDisabled; + } + this.endpoint = new NavigationEndpoint(data.navigationEndpoint || data.serviceEndpoint || data.command); } } diff --git a/src/parser/classes/ExpandableMetadata.ts b/src/parser/classes/ExpandableMetadata.ts new file mode 100644 index 00000000..7a4b859a --- /dev/null +++ b/src/parser/classes/ExpandableMetadata.ts @@ -0,0 +1,41 @@ +import Parser from '..'; + +import Text from './misc/Text'; +import Thumbnail from './misc/Thumbnail'; + +import Button from './Button'; +import HorizontalCardList from './HorizontalCardList'; + +import { YTNode } from '../helpers'; + +class ExpandableMetadata extends YTNode { + static type = 'ExpandableMetadata'; + + header: { + collapsed_title: Text; + collapsed_thumbnail: Thumbnail[]; + collapsed_label: Text; + expanded_title: Text; + }; + + expanded_content: HorizontalCardList | null; + expand_button: Button | null; + collapse_button: Button | null; + + constructor(data: any) { + super(); + + this.header = { + collapsed_title: new Text(data.header.collapsedTitle), + collapsed_thumbnail: Thumbnail.fromResponse(data.header.collapsedThumbnail), + collapsed_label: new Text(data.header.collapsedLabel), + expanded_title: new Text(data.header.expandedTitle) + }; + + this.expanded_content = Parser.parseItem(data.expandedContent); + this.expand_button = Parser.parseItem