diff --git a/src/parser/classes/ThumbnailBottomOverlayView.ts b/src/parser/classes/ThumbnailBottomOverlayView.ts new file mode 100644 index 000000000..936bc4014 --- /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 000000000..d6a839557 --- /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 80ac6167b..2b780e721 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 000000000..52c94e5d4 --- /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 c993e95f3..26c5dbacb 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 cdbed1053..d2a78d49b 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';