diff --git a/src/parser/classes/ExpandableMetadata.ts b/src/parser/classes/ExpandableMetadata.ts index 90dbe8c1..1312b916 100644 --- a/src/parser/classes/ExpandableMetadata.ts +++ b/src/parser/classes/ExpandableMetadata.ts @@ -5,6 +5,7 @@ import HorizontalCardList from './HorizontalCardList.js'; import HorizontalList from './HorizontalList.js'; import Text from './misc/Text.js'; import Thumbnail from './misc/Thumbnail.js'; +import VideoSummaryContentView from './VideoSummaryContentView.js'; export default class ExpandableMetadata extends YTNode { static type = 'ExpandableMetadata'; @@ -16,7 +17,7 @@ export default class ExpandableMetadata extends YTNode { expanded_title: Text; }; - expanded_content: HorizontalCardList | HorizontalList | null; + expanded_content: VideoSummaryContentView | HorizontalCardList | HorizontalList | null; expand_button: Button | null; collapse_button: Button | null; @@ -32,7 +33,7 @@ export default class ExpandableMetadata extends YTNode { }; } - this.expanded_content = Parser.parseItem(data.expandedContent, [ HorizontalCardList, HorizontalList ]); + this.expanded_content = Parser.parseItem(data.expandedContent, [ VideoSummaryContentView, HorizontalCardList, HorizontalList ]); this.expand_button = Parser.parseItem(data.expandButton, Button); this.collapse_button = Parser.parseItem(data.collapseButton, Button); } diff --git a/src/parser/classes/VideoSummaryContentView.ts b/src/parser/classes/VideoSummaryContentView.ts new file mode 100644 index 00000000..e463f8d3 --- /dev/null +++ b/src/parser/classes/VideoSummaryContentView.ts @@ -0,0 +1,28 @@ +import type { ObservedArray } from '../helpers.js'; +import { YTNode } from '../helpers.js'; +import { Parser, type RawNode } from '../index.js'; +import DislikeButtonView from './DislikeButtonView.js'; +import LikeButtonView from './LikeButtonView.js'; +import VideoSummaryParagraphView from './VideoSummaryParagraphView.js'; + +export default class VideoSummaryContentView extends YTNode { + static type = 'VideoSummaryContentView'; + + public dislike_button_view?: DislikeButtonView | null; + public like_button_view?: LikeButtonView | null; + public paragraphs: ObservedArray; + + constructor(data: RawNode) { + super(); + + if ('dislikeButtonViewModel' in data) { + this.dislike_button_view = Parser.parseItem(data.dislikeButtonViewModel, DislikeButtonView); + } + + if ('likeButtonViewModel' in data) { + this.like_button_view = Parser.parseItem(data.likeButtonViewModel, LikeButtonView); + } + + this.paragraphs = Parser.parseArray(data.paragraphs, VideoSummaryParagraphView); + } +} \ No newline at end of file diff --git a/src/parser/classes/VideoSummaryParagraphView.ts b/src/parser/classes/VideoSummaryParagraphView.ts new file mode 100644 index 00000000..265230e0 --- /dev/null +++ b/src/parser/classes/VideoSummaryParagraphView.ts @@ -0,0 +1,14 @@ +import { YTNode } from '../helpers.js'; +import { type RawNode } from '../index.js'; +import { Text } from '../misc.js'; + +export default class VideoSummaryParagraphView extends YTNode { + static type = 'VideoSummaryParagraphView'; + + public text: Text; + + constructor(data: RawNode) { + super(); + this.text = Text.fromAttributed(data.text); + } +} \ No newline at end of file diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index 7e6b6ccc..a5182994 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -528,6 +528,8 @@ export { default as VideoMetadataCarouselView } from './classes/VideoMetadataCar export { default as VideoOwner } from './classes/VideoOwner.js'; export { default as VideoPrimaryInfo } from './classes/VideoPrimaryInfo.js'; export { default as VideoSecondaryInfo } from './classes/VideoSecondaryInfo.js'; +export { default as VideoSummaryContentView } from './classes/VideoSummaryContentView.js'; +export { default as VideoSummaryParagraphView } from './classes/VideoSummaryParagraphView.js'; export { default as VideoViewCount } from './classes/VideoViewCount.js'; export { default as ViewCountFactoid } from './classes/ViewCountFactoid.js'; export { default as WatchCardCompactVideo } from './classes/WatchCardCompactVideo.js';