From 424c65356c24d19a921e24aadcbbb3cd03ab103a Mon Sep 17 00:00:00 2001 From: Luan Date: Sat, 25 Jan 2025 11:59:17 -0300 Subject: [PATCH] fix(LockupView): Add overlay nodes used by `VIDEO` views --- .../classes/ThumbnailBottomOverlayView.ts | 18 ++++++++++++++++++ .../ThumbnailHoverOverlayToggleActionsView.ts | 15 +++++++++++++++ .../classes/ThumbnailOverlayBadgeView.ts | 4 ++-- .../classes/ThumbnailOverlayProgressBarView.ts | 13 +++++++++++++ src/parser/classes/ThumbnailView.ts | 15 ++++++++++++--- src/parser/nodes.ts | 3 +++ 6 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 src/parser/classes/ThumbnailBottomOverlayView.ts create mode 100644 src/parser/classes/ThumbnailHoverOverlayToggleActionsView.ts create mode 100644 src/parser/classes/ThumbnailOverlayProgressBarView.ts diff --git a/src/parser/classes/ThumbnailBottomOverlayView.ts b/src/parser/classes/ThumbnailBottomOverlayView.ts new file mode 100644 index 00000000..936bc401 --- /dev/null +++ b/src/parser/classes/ThumbnailBottomOverlayView.ts @@ -0,0 +1,18 @@ +import type { ObservedArray } from '../helpers.js'; +import { YTNode } from '../helpers.js'; +import { Parser, type RawNode } from '../index.js'; +import ThumbnailBadgeView from './ThumbnailBadgeView.js'; +import ThumbnailOverlayProgressBarView from './ThumbnailOverlayProgressBarView.js'; + +export default class ThumbnailBottomOverlayView extends YTNode { + static type = 'ThumbnailBottomOverlayView'; + + public progress_bar: ThumbnailOverlayProgressBarView | null; + public badges: ObservedArray; + + constructor(data: RawNode) { + super(); + this.progress_bar = Parser.parseItem(data.progressBar, ThumbnailOverlayProgressBarView); + this.badges = Parser.parseArray(data.badges, ThumbnailBadgeView); + } +} \ No newline at end of file diff --git a/src/parser/classes/ThumbnailHoverOverlayToggleActionsView.ts b/src/parser/classes/ThumbnailHoverOverlayToggleActionsView.ts new file mode 100644 index 00000000..d6a83955 --- /dev/null +++ b/src/parser/classes/ThumbnailHoverOverlayToggleActionsView.ts @@ -0,0 +1,15 @@ +import type { ObservedArray } from '../helpers.js'; +import { YTNode } from '../helpers.js'; +import { Parser, type RawNode } from '../index.js'; +import ToggleButtonView from './ToggleButtonView.js'; + +export default class ThumbnailHoverOverlayToggleActionsView extends YTNode { + static type = 'ThumbnailHoverOverlayToggleActionsView'; + + public buttons: ObservedArray; + + constructor(data: RawNode) { + super(); + this.buttons = Parser.parseArray(data.buttons, ToggleButtonView); + } +} \ No newline at end of file diff --git a/src/parser/classes/ThumbnailOverlayBadgeView.ts b/src/parser/classes/ThumbnailOverlayBadgeView.ts index 80ac6167..2b780e72 100644 --- a/src/parser/classes/ThumbnailOverlayBadgeView.ts +++ b/src/parser/classes/ThumbnailOverlayBadgeView.ts @@ -5,8 +5,8 @@ import ThumbnailBadgeView from './ThumbnailBadgeView.js'; export default class ThumbnailOverlayBadgeView extends YTNode { static type = 'ThumbnailOverlayBadgeView'; - badges: ThumbnailBadgeView[]; - position: string; + public badges: ThumbnailBadgeView[]; + public position: string; constructor(data: RawNode) { super(); diff --git a/src/parser/classes/ThumbnailOverlayProgressBarView.ts b/src/parser/classes/ThumbnailOverlayProgressBarView.ts new file mode 100644 index 00000000..52c94e5d --- /dev/null +++ b/src/parser/classes/ThumbnailOverlayProgressBarView.ts @@ -0,0 +1,13 @@ +import { YTNode } from '../helpers.js'; +import { type RawNode } from '../index.js'; + +export default class ThumbnailOverlayProgressBarView extends YTNode { + static type = 'ThumbnailOverlayProgressBarView'; + + public start_percent: number; + + constructor(data: RawNode) { + super(); + this.start_percent = data.startPercent; + } +} \ No newline at end of file diff --git a/src/parser/classes/ThumbnailView.ts b/src/parser/classes/ThumbnailView.ts index c993e95f..26c5dbac 100644 --- a/src/parser/classes/ThumbnailView.ts +++ b/src/parser/classes/ThumbnailView.ts @@ -1,8 +1,11 @@ +import type { ObservedArray } from '../helpers.js'; import { YTNode } from '../helpers.js'; import { Parser, type RawNode } from '../index.js'; import ThumbnailHoverOverlayView from './ThumbnailHoverOverlayView.js'; import ThumbnailOverlayBadgeView from './ThumbnailOverlayBadgeView.js'; import Thumbnail from './misc/Thumbnail.js'; +import ThumbnailHoverOverlayToggleActionsView from './ThumbnailHoverOverlayToggleActionsView.js'; +import ThumbnailBottomOverlayView from './ThumbnailBottomOverlayView.js'; export type ThumbnailBackgroundColor = { light_theme: number; @@ -13,15 +16,21 @@ export default class ThumbnailView extends YTNode { static type = 'ThumbnailView'; public image: Thumbnail[]; - public overlays: (ThumbnailOverlayBadgeView | ThumbnailHoverOverlayView)[]; + public overlays: ObservedArray< + ThumbnailHoverOverlayToggleActionsView | ThumbnailBottomOverlayView | + ThumbnailOverlayBadgeView | ThumbnailHoverOverlayView + >; public background_color?: ThumbnailBackgroundColor; constructor(data: RawNode) { super(); this.image = Thumbnail.fromResponse(data.image); - this.overlays = Parser.parseArray(data.overlays, [ ThumbnailOverlayBadgeView, ThumbnailHoverOverlayView ]); - + this.overlays = Parser.parseArray(data.overlays, [ + ThumbnailHoverOverlayToggleActionsView, ThumbnailBottomOverlayView, + ThumbnailOverlayBadgeView, ThumbnailHoverOverlayView + ]); + if ('backgroundColor' in data) { this.background_color = { light_theme: data.backgroundColor.lightTheme, diff --git a/src/parser/nodes.ts b/src/parser/nodes.ts index cdbed105..d2a78d49 100644 --- a/src/parser/nodes.ts +++ b/src/parser/nodes.ts @@ -455,6 +455,8 @@ export { default as TextFieldView } from './classes/TextFieldView.js'; export { default as TextHeader } from './classes/TextHeader.js'; export { default as ThirdPartyShareTargetSection } from './classes/ThirdPartyShareTargetSection.js'; export { default as ThumbnailBadgeView } from './classes/ThumbnailBadgeView.js'; +export { default as ThumbnailBottomOverlayView } from './classes/ThumbnailBottomOverlayView.js'; +export { default as ThumbnailHoverOverlayToggleActionsView } from './classes/ThumbnailHoverOverlayToggleActionsView.js'; export { default as ThumbnailHoverOverlayView } from './classes/ThumbnailHoverOverlayView.js'; export { default as ThumbnailLandscapePortrait } from './classes/ThumbnailLandscapePortrait.js'; export { default as ThumbnailOverlayBadgeView } from './classes/ThumbnailOverlayBadgeView.js'; @@ -466,6 +468,7 @@ export { default as ThumbnailOverlayLoadingPreview } from './classes/ThumbnailOv export { default as ThumbnailOverlayNowPlaying } from './classes/ThumbnailOverlayNowPlaying.js'; export { default as ThumbnailOverlayPinking } from './classes/ThumbnailOverlayPinking.js'; export { default as ThumbnailOverlayPlaybackStatus } from './classes/ThumbnailOverlayPlaybackStatus.js'; +export { default as ThumbnailOverlayProgressBarView } from './classes/ThumbnailOverlayProgressBarView.js'; export { default as ThumbnailOverlayResumePlayback } from './classes/ThumbnailOverlayResumePlayback.js'; export { default as ThumbnailOverlaySidePanel } from './classes/ThumbnailOverlaySidePanel.js'; export { default as ThumbnailOverlayTimeStatus } from './classes/ThumbnailOverlayTimeStatus.js';