mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-21 13:31:36 +00:00
feat: allow checking whether a channel has optional tabs (#296)
This commit is contained in:
@@ -47,6 +47,10 @@ class TabbedFeed extends Feed {
|
||||
return new TabbedFeed(this.#actions, response.data, false);
|
||||
}
|
||||
|
||||
hasTabWithURL(url: string): boolean {
|
||||
return this.#tabs.some((tab) => tab.endpoint.metadata.url?.split('/').pop() === url);
|
||||
}
|
||||
|
||||
get title(): string | undefined {
|
||||
return this.page.contents_memo.getType(Tab)?.find((tab) => tab.selected)?.title.toString();
|
||||
}
|
||||
|
||||
@@ -196,6 +196,26 @@ export default class Channel extends TabbedFeed {
|
||||
return new Channel(this.actions, page, true);
|
||||
}
|
||||
|
||||
get has_videos(): boolean {
|
||||
return this.hasTabWithURL('videos');
|
||||
}
|
||||
|
||||
get has_shorts(): boolean {
|
||||
return this.hasTabWithURL('shorts');
|
||||
}
|
||||
|
||||
get has_live_streams(): boolean {
|
||||
return this.hasTabWithURL('streams');
|
||||
}
|
||||
|
||||
get has_playlists(): boolean {
|
||||
return this.hasTabWithURL('playlists');
|
||||
}
|
||||
|
||||
get has_community(): boolean {
|
||||
return this.hasTabWithURL('community');
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrives list continuation.
|
||||
*/
|
||||
|
||||
@@ -37,5 +37,9 @@ export const CHANNELS = [
|
||||
{
|
||||
ID: 'UCpbpfcZfo-hoDAx2m1blFhg',
|
||||
NAME: 'Learning Blocks'
|
||||
},
|
||||
{
|
||||
ID: 'UCt-oJR5teQIjOAxCmIQvcgA',
|
||||
NAME: "They're Just Movies"
|
||||
}
|
||||
];
|
||||
@@ -163,6 +163,15 @@ describe('YouTube.js Tests', () => {
|
||||
expect(filtered_list.videos.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it('should detect missing channel tabs', async () => {
|
||||
const channel = await yt.getChannel(CHANNELS[2].ID);
|
||||
expect(channel.has_videos).toBe(true);
|
||||
expect(channel.has_shorts).toBe(false);
|
||||
expect(channel.has_live_streams).toBe(false);
|
||||
expect(channel.has_playlists).toBe(true);
|
||||
expect(channel.has_community).toBe(true);
|
||||
})
|
||||
|
||||
it('should retrieve home feed', async () => {
|
||||
const homefeed = await yt.getHomeFeed();
|
||||
expect(homefeed.header).toBeDefined();
|
||||
|
||||
Reference in New Issue
Block a user