diff --git a/app/src/main/assets/devportal/plugin.d.ts b/app/src/main/assets/devportal/plugin.d.ts index 75327d0b24dfc2970dfc42a5a48331bfa031f526..23db7d2fbe64ab2a6ec1065593249b1349e0e2f6 100644 --- a/app/src/main/assets/devportal/plugin.d.ts +++ b/app/src/main/assets/devportal/plugin.d.ts @@ -1,13 +1,37 @@ declare class ScriptException extends Error { + //If only one parameter is provided, acts as msg constructor(type: string, msg: string); } -declare class TimeoutException extends ScriptException { + +declare class LoginRequiredException extends ScriptException { + constructor(msg: string); +} +//Alias +declare class ScriptLoginRequiredException extends ScriptException { + constructor(msg: string); +} + +declare class CaptchaRequiredException extends ScriptException { + constructor(url: string, body: string); +} + +declare class CriticalException extends ScriptException { constructor(msg: string); } + declare class UnavailableException extends ScriptException { constructor(msg: string); } + +declare class AgeException extends ScriptException { + constructor(msg: string); +} + +declare class TimeoutException extends ScriptException { + constructor(msg: string); +} + declare class ScriptImplementationException extends ScriptException { constructor(msg: string); } @@ -38,16 +62,23 @@ declare class FilterCapability { declare class PlatformAuthorLink { - constructor(id: PlatformID, name: string, url: string, thumbnail: string, subscribers: integer?); + constructor(id: PlatformID, name: string, url: string, thumbnail: string, subscribers: integer?, membershipUrl: string?); +} + +declare class PlatformAuthorMembershipLink { + constructor(id: PlatformID, name: string, url: string, thumbnail: string, subscribers: integer?, membershipUrl: string?); } declare interface PlatformContentDef { id: PlatformID, name: string, + thumbnails: Thumbnails, author: PlatformAuthorLink, datetime: integer, url: string } +declare interface PlatformContent {} + declare interface PlatformNestedMediaContentDef extends PlatformContentDef { contentUrl: string, contentName: string?, @@ -59,16 +90,26 @@ declare class PlatformNestedMediaContent { constructor(obj: PlatformNestedMediaContentDef); } +declare interface PlatformLockedContentDef extends PlatformContentDef { + contentName: string?, + contentThumbnails: Thumbnails?, + unlockUrl: string, + lockDescription: string?, +} +declare class PlatformLockedContent { + constructor(obj: PlatformLockedContentDef); +} + + declare interface PlatformVideoDef extends PlatformContentDef { thumbnails: Thumbnails, author: PlatformAuthorLink, duration: int, viewCount: long, - isLive: boolean + isLive: boolean, + shareUrl: string? } -declare interface PlatformContent {} - declare class PlatformVideo implements PlatformContent { constructor(obj: PlatformVideoDef); } @@ -77,14 +118,15 @@ declare class PlatformVideo implements PlatformContent { declare interface PlatformVideoDetailsDef extends PlatformVideoDef { description: string, video: VideoSourceDescriptor, - live: SubtitleSource[], - rating: IRating + live: IVideoSource, + rating: IRating, + subtitles: SubtitleSource[] } declare class PlatformVideoDetails extends PlatformVideo { constructor(obj: PlatformVideoDetailsDef); } -declare class PlatformPostDef extends PlatformContentDef { +declare interface PlatformPostDef extends PlatformContentDef { thumbnails: string[], images: string[], description: string @@ -93,7 +135,7 @@ declare class PlatformPost extends PlatformContent { constructor(obj: PlatformPostDef) } -declare class PlatformPostDetailsDef extends PlatformPostDef { +declare interface PlatformPostDetailsDef extends PlatformPostDef { rating: IRating, textType: int, content: String @@ -110,8 +152,8 @@ declare interface MuxVideoSourceDescriptorDef { isUnMuxed: boolean, videoSources: VideoSource[] } -declare class MuxVideoSourceDescriptor implements IVideoSourceDescriptor { - constructor(obj: VideoSourceDescriptorDef); +declare class VideoSourceDescriptor implements IVideoSourceDescriptor { + constructor(videoSourcesOrObj: VideoSource[]); } declare interface UnMuxVideoSourceDescriptorDef { @@ -129,7 +171,7 @@ declare interface IVideoSource { declare interface IAudioSource { } -interface VideoUrlSourceDef implements IVideoSource { +declare interface VideoUrlSourceDef implements IVideoSource { width: integer, height: integer, container: string, @@ -139,22 +181,22 @@ interface VideoUrlSourceDef implements IVideoSource { duration: integer, url: string } -class VideoUrlSource { +declare class VideoUrlSource { constructor(obj: VideoUrlSourceDef); getRequestModifier(): RequestModifier?; } -interface VideoUrlRangeSourceDef extends VideoUrlSource { +declare interface VideoUrlRangeSourceDef extends VideoUrlSource { itagId: integer, initStart: integer, initEnd: integer, indexStart: integer, indexEnd: integer, } -class VideoUrlRangeSource extends VideoUrlSource { +declare class VideoUrlRangeSource extends VideoUrlSource { constructor(obj: YTVideoSourceDef); } -interface AudioUrlSourceDef { +declare interface AudioUrlSourceDef { name: string, bitrate: integer, container: string, @@ -163,24 +205,12 @@ interface AudioUrlSourceDef { url: string, language: string } -class AudioUrlSource implements IAudioSource { +declare class AudioUrlSource implements IAudioSource { constructor(obj: AudioUrlSourceDef); getRequestModifier(): RequestModifier?; } -interface IRequest { - url: string, - headers: Map<string, string> -} -interface IRequestModifierDef { - allowByteSkip: boolean -} -class RequestModifier { - constructor(obj: IRequestModifierDef) { } - - modifyRequest(url: string, headers: Map<string, string>): IRequest; -} -interface AudioUrlRangeSourceDef extends AudioUrlSource { +declare interface AudioUrlRangeSourceDef extends AudioUrlSource { itagId: integer, initStart: integer, initEnd: integer, @@ -188,28 +218,44 @@ interface AudioUrlRangeSourceDef extends AudioUrlSource { indexEnd: integer, audioChannels: integer } -class AudioUrlRangeSource extends AudioUrlSource { +declare class AudioUrlRangeSource extends AudioUrlSource { constructor(obj: AudioUrlRangeSourceDef); } -interface HLSSourceDef { +declare interface HLSSourceDef { name: string, duration: integer, - url: string + url: string, + priority: boolean?, + language: string? } -class HLSSource implements IVideoSource { +declare class HLSSource implements IVideoSource { constructor(obj: HLSSourceDef); } -interface DashSourceDef { +declare interface DashSourceDef { name: string, duration: integer, - url: string + url: string, + language: string? } -class DashSource implements IVideoSource { +declare class DashSource implements IVideoSource { constructor(obj: DashSourceDef) } +declare interface IRequest { + url: string, + headers: Map<string, string> +} +declare interface IRequestModifierDef { + allowByteSkip: boolean +} +declare class RequestModifier { + constructor(obj: IRequestModifierDef) { } + + modifyRequest(url: string, headers: Map<string, string>): IRequest; +} + //Channel -interface PlatformChannelDef { +declare interface PlatformChannelDef { id: PlatformID, name: string, thumbnail: string, @@ -217,12 +263,29 @@ interface PlatformChannelDef { subscribers: integer, description: string, url: string, + urlAlternatives: string[], links: Map<string>? } -class PlatformChannel { +declare class PlatformChannel { constructor(obj: PlatformChannelDef); } +//Playlist +declare interface PlatformPlaylistDef implements PlatformContent { + videoCount: integer, + thumbnail: string +} +declare class PlatformPlaylist extends PlatformContent { + constructor(obj: PlatformPlaylistDef); +} +declare interface PlatformPlaylistDetailsDef implements PlatformPlaylistDef { + contents: ContentPager +} +declare class PlatformPlaylistDetails extends PlatformContent { + constructor(obj: PlatformPlaylistDetailsDef); +} + + //Ratings interface IRating { type: integer @@ -250,7 +313,11 @@ declare class PlatformComment { constructor(obj: CommentDef); } +declare class PlaybackTracker { + constructor(interval: integer); + setProgress(seconds: integer); +} declare class LiveEventPager { nextRequest = 4000; @@ -261,8 +328,8 @@ declare class LiveEventPager { nextPage(): LiveEventPager; //Could be self } -class LiveEvent { - type: String +declare class LiveEvent { + constructor(type: integer); } declare class LiveEventComment extends LiveEvent { constructor(name: string, message: string, thumbnail: string?, colorName: string?, badges: string[]); @@ -287,25 +354,31 @@ declare class ContentPager { constructor(results: PlatformContent[], hasMore: boolean); hasMorePagers(): boolean - nextPage(): VideoPager; //Could be self + nextPage(): ContentPager?; //Could be self } declare class VideoPager { constructor(results: PlatformVideo[], hasMore: boolean); hasMorePagers(): boolean - nextPage(): VideoPager; //Could be self + nextPage(): VideoPager?; //Could be self } declare class ChannelPager { constructor(results: PlatformChannel[], hasMore: boolean); hasMorePagers(): boolean; - nextPage(): ChannelPager; //Could be self + nextPage(): ChannelPager?; //Could be self +} +declare class PlaylistPager { + constructor(results: PlatformPlaylist[], hasMore: boolean); + + hasMorePagers(): boolean; + nextPage(): PlaylistPager?; } declare class CommentPager { constructor(results: PlatformComment[], hasMore: boolean); hasMorePagers(): boolean - nextPage(): CommentPager; //Could be self + nextPage(): CommentPager?; //Could be self } interface Map<T> { @@ -341,8 +414,9 @@ interface Source { getChannelCapabilities(): ResultCapabilities; isContentDetailsUrl(url: string): boolean; - getContentDetails(url: string): PlatformVideoDetails; + getContentDetails(url: string): PlatformContentDetails; + //Optional getLiveEvents(url: string): LiveEventPager; //Optional diff --git a/app/src/main/assets/scripts/source.js b/app/src/main/assets/scripts/source.js index 16a3e2fedd42984def242f552b0ddebdef2d2e18..aef3ed6ff7de89962bf31a18f30c72c8dbc666ed 100644 --- a/app/src/main/assets/scripts/source.js +++ b/app/src/main/assets/scripts/source.js @@ -78,6 +78,11 @@ class ScriptLoginRequiredException extends ScriptException { super("ScriptLoginRequiredException", msg); } } +class LoginRequiredException extends ScriptException { + constructor(msg) { + super("ScriptLoginRequiredException", msg); + } +} class CaptchaRequiredException extends Error { constructor(url, body) { super(JSON.stringify({ 'plugin_type': 'CaptchaRequiredException', url, body })); @@ -249,8 +254,8 @@ class PlatformVideoDetails extends PlatformVideo { this.description = obj.description ?? "";//String this.video = obj.video ?? {}; //VideoSourceDescriptor - this.dash = obj.dash ?? null; //DashSource - this.hls = obj.hls ?? null; //HLSSource + this.dash = obj.dash ?? null; //DashSource, deprecated + this.hls = obj.hls ?? null; //HLSSource, deprecated this.live = obj.live ?? null; //VideoSource this.rating = obj.rating ?? null; //IRating @@ -388,7 +393,7 @@ class DashSource { class RequestModifier { constructor(obj) { obj = obj ?? {}; - this.allowByteSkip = obj.allowByteSkip; + this.allowByteSkip = obj.allowByteSkip; //Kinda deprecated.. wip } }