Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/parser/classes/misc/Author.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,19 @@ import * as Constants from '../../../utils/Constants.js';
import type { YTNode } from '../../helpers.js';
import { observe, type ObservedArray } from '../../helpers.js';
import { Parser, type RawNode } from '../../index.js';
import type ShowDialogCommand from '../commands/ShowDialogCommand.js';
import type DialogView from '../DialogView.js';
import type ListView from '../ListView.js';
import type NavigationEndpoint from '../NavigationEndpoint.js';
import Collaborator from './Collaborator.js';
import Text from './Text.js';
import type TextRun from './TextRun.js';
import Thumbnail from './Thumbnail.js';

export default class Author {
id: string;
name: string;
collaborators: Collaborator[];
thumbnails: Thumbnail[];
endpoint?: NavigationEndpoint;
badges: ObservedArray<YTNode>;
Expand All @@ -23,6 +28,9 @@ export default class Author {

this.id = id || (nav_text?.runs?.[0] as TextRun)?.endpoint?.payload?.browseId || nav_text?.endpoint?.payload?.browseId || 'N/A';
this.name = nav_text?.text || 'N/A';
this.collaborators = (((nav_text?.endpoint?.command as ShowDialogCommand)?.inline_content as DialogView)?.custom_content as ListView)?.items
?.filter((item: any) => item.renderer_context?.command_context?.on_tap?.metadata?.page_type === 'WEB_PAGE_TYPE_CHANNEL')
.map((item: any) => new Collaborator(item)) ?? [];
this.thumbnails = thumbs ? Thumbnail.fromResponse(thumbs) : [];
this.endpoint = ((nav_text?.runs?.[0] as TextRun) as TextRun)?.endpoint || nav_text?.endpoint;

Expand Down
20 changes: 20 additions & 0 deletions src/parser/classes/misc/Collaborator.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import * as Constants from '../../../utils/Constants.js';
import type { RawNode } from '../../types/RawResponse.js';
import Thumbnail from './Thumbnail.js';

export default class Collaborator {
id: string;
name: string;
thumbnails: Thumbnail[];
url: string;
channel_info: string;

constructor(data: RawNode) {
this.id = data.renderer_context?.command_context?.on_tap?.payload?.browseId || 'N/A';
this.name = data.title?.text || 'N/A';
this.thumbnails = Thumbnail.fromResponse(data.leading_accessory);
const urlPath = data.renderer_context?.command_context?.on_tap?.metadata?.url;
this.url = urlPath ? `${Constants.URLS.YT_BASE}${urlPath}` : 'N/A';
this.channel_info = data.subtitle?.text || 'N/A';
}
}
2 changes: 2 additions & 0 deletions src/parser/classes/misc/Thumbnail.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ export default class Thumbnail {
thumbnail_data = data.thumbnails;
} else if (data.sources) {
thumbnail_data = data.sources;
} else if (data.image) {
thumbnail_data = data.image;
}

if (thumbnail_data) {
Expand Down
1 change: 1 addition & 0 deletions src/parser/misc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export { default as AccessibilityContext } from './classes/misc/AccessibilityCon
export { default as AccessibilityData } from './classes/misc/AccessibilityData.js';
export { default as Author } from './classes/misc/Author.js';
export { default as ChildElement } from './classes/misc/ChildElement.js';
export { default as Collaborator } from './classes/misc/Collaborator.js';
export { default as CommandContext } from './classes/misc/CommandContext.js';
export { default as CommentsContinuation } from './classes/misc/CommentsContinuation.js';
export { default as EmojiRun } from './classes/misc/EmojiRun.js';
Expand Down