refactor: Clean up & fix old code

Other changes:
- Renamed "getShortsWatchItem" to "getShortsVideoInfo".
- Fixed `ShortFormVideoInfo`. This never worked for me ever since it was introduced. Turned out it was just implemented incorrectly.
- Moved `basic_info` extraction to `MediaInfo`. Less of a pain to maintain as we only have to modify one file.
- Removed unneeded tsdoc comments.
- Fixed `Innertube#getStreamingData()`. Now it actually returns a deciphered format.
- Simplified some types.
This commit is contained in:
Luan
2024-07-30 18:49:24 -03:00
parent 3153375bca
commit 9b9fb82131
52 changed files with 362 additions and 557 deletions

View File

@@ -1,14 +0,0 @@
import { YTNode } from '../helpers.js';
import type { RawNode } from '../index.js';
import NavigationEndpoint from './NavigationEndpoint.js';
export default class Command extends YTNode {
static type = 'Command';
endpoint: NavigationEndpoint;
constructor(data: RawNode) {
super();
this.endpoint = new NavigationEndpoint(data);
}
}

View File

@@ -13,7 +13,7 @@ export default class CompactVideo extends YTNode {
id: string;
thumbnails: Thumbnail[];
rich_thumbnail?: SuperParsedResult<YTNode>;
rich_thumbnail?: YTNode;
title: Text;
author: Author;
view_count: Text;
@@ -36,7 +36,7 @@ export default class CompactVideo extends YTNode {
this.thumbnails = Thumbnail.fromResponse(data.thumbnail) || null;
if (Reflect.has(data, 'richThumbnail')) {
this.rich_thumbnail = Parser.parse(data.richThumbnail);
this.rich_thumbnail = Parser.parseItem(data.richThumbnail);
}
this.title = new Text(data.title);

View File

@@ -27,8 +27,8 @@ export default class NavigationEndpoint extends YTNode {
constructor(data: RawNode) {
super();
if (Reflect.has(data || {}, 'innertubeCommand'))
data = data.innertubeCommand;
if (data && (data.innertubeCommand || data.command))
data = data.innertubeCommand || data.command;
if (Reflect.has(data || {}, 'openPopupAction'))
this.open_popup = new OpenPopupAction(data.openPopupAction);
@@ -92,13 +92,14 @@ export default class NavigationEndpoint extends YTNode {
case 'browseEndpoint':
return '/browse';
case 'watchEndpoint':
case 'reelWatchEndpoint':
return '/player';
case 'searchEndpoint':
return '/search';
case 'watchPlaylistEndpoint':
return '/next';
case 'liveChatItemContextMenuEndpoint':
return 'live_chat/get_item_context_menu';
return '/live_chat/get_item_context_menu';
}
}

View File

@@ -6,6 +6,7 @@ import InfoPanelContainer from './InfoPanelContainer.js';
import LikeButton from './LikeButton.js';
import ReelPlayerHeader from './ReelPlayerHeader.js';
import PivotButton from './PivotButton.js';
import SubscribeButton from './SubscribeButton.js';
export default class ReelPlayerOverlay extends YTNode {
static type = 'ReelPlayerOverlay';
@@ -29,7 +30,7 @@ export default class ReelPlayerOverlay extends YTNode {
this.menu = Parser.parseItem(data.menu, Menu);
this.next_item_button = Parser.parseItem(data.nextItemButton, Button);
this.prev_item_button = Parser.parseItem(data.prevItemButton, Button);
this.subscribe_button_renderer = Parser.parseItem(data.subscribeButtonRenderer, Button);
this.subscribe_button_renderer = Parser.parseItem(data.subscribeButtonRenderer, [ Button, SubscribeButton ]);
this.style = data.style;
this.view_comments_button = Parser.parseItem(data.viewCommentsButton, Button);
this.share_button = Parser.parseItem(data.shareButton, Button);

View File

@@ -17,8 +17,8 @@ export default class ThumbnailOverlayToggleButton extends YTNode {
untoggled: string;
};
toggled_endpoint: NavigationEndpoint;
untoggled_endpoint: NavigationEndpoint;
toggled_endpoint?: NavigationEndpoint;
untoggled_endpoint?: NavigationEndpoint;
constructor(data: RawNode) {
super();
@@ -36,7 +36,10 @@ export default class ThumbnailOverlayToggleButton extends YTNode {
untoggled: data.untoggledTooltip
};
this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);
this.untoggled_endpoint = new NavigationEndpoint(data.untoggledServiceEndpoint);
if (data.toggledServiceEndpoint)
this.toggled_endpoint = new NavigationEndpoint(data.toggledServiceEndpoint);
if (data.untoggledServiceEndpoint)
this.untoggled_endpoint = new NavigationEndpoint(data.untoggledServiceEndpoint);
}
}

View File

@@ -1,7 +1,8 @@
import Text from '../misc/Text.js';
import { YTNode } from '../../helpers.js';
import type { RawNode } from '../../index.js';
class UpdateToggleButtonTextAction extends YTNode {
export default class UpdateToggleButtonTextAction extends YTNode {
static type = 'UpdateToggleButtonTextAction';
default_text: string;
@@ -14,6 +15,4 @@ class UpdateToggleButtonTextAction extends YTNode {
this.toggled_text = new Text(data.toggledText).toString();
this.button_id = data.buttonId;
}
}
export default UpdateToggleButtonTextAction;
}

View File

@@ -1,18 +1,19 @@
import { YTNode, type SuperParsedResult } from '../../helpers.js';
import type { ObservedArray } from '../../helpers.js';
import { YTNode } from '../../helpers.js';
import type { RawNode } from '../../index.js';
import { Parser } from '../../index.js';
export default class MultiPageMenu extends YTNode {
static type = 'MultiPageMenu';
header: SuperParsedResult<YTNode>;
sections: SuperParsedResult<YTNode>;
header: YTNode;
sections: ObservedArray<YTNode>;
style: string;
constructor(data: RawNode) {
super();
this.header = Parser.parse(data.header);
this.sections = Parser.parse(data.sections);
this.header = Parser.parseItem(data.header);
this.sections = Parser.parseArray(data.sections);
this.style = data.style;
}
}

View File

@@ -1,19 +1,19 @@
import type { SuperParsedResult } from '../../helpers.js';
import type { ObservedArray } from '../../helpers.js';
import { YTNode } from '../../helpers.js';
import type { RawNode } from '../../index.js';
import { Parser } from '../../index.js';
import Button from '../Button.js';
import Text from '../misc/Text.js';
export default class SimpleMenuHeader extends YTNode {
static type = 'SimpleMenuHeader';
title: Text;
buttons: SuperParsedResult<YTNode>;
buttons: ObservedArray<Button>;
constructor(data: RawNode) {
super();
this.title = new Text(data.title);
// @TODO: Check if this is of type `Button`.
this.buttons = Parser.parse(data.buttons);
this.buttons = Parser.parseArray(data.buttons, Button);
}
}