Add newer cast API additions and stub methods

This commit is contained in:
hensm
2021-02-16 04:03:56 +00:00
parent 5a9a32f5ab
commit e4e133ced5
22 changed files with 294 additions and 32 deletions

View File

@@ -8,10 +8,6 @@ import { AutoJoinPolicy
export default class ApiConfig {
public additionalSessionRequests: any[] = [];
public customDialLaunchCallback: any = null;
public invisibleSender = false;
constructor (
public sessionRequest: SessionRequest
, public sessionListener: (session: Session) => void

View File

@@ -0,0 +1,9 @@
"use strict";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.CredentialsData
export default class DialRequest {
constructor (
public credentials: string
, public credentialsData: string) {
}
}

View File

@@ -3,7 +3,7 @@
import ReceiverDisplayStatus from "./ReceiverDisplayStatus";
import Volume from "./Volume";
import { ReceiverType } from "../enums";
import { Capability, ReceiverType } from "../enums";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.Receiver
@@ -15,7 +15,7 @@ export default class Receiver {
constructor (
public label: string
, public friendlyName: string
, public capabilities: string[] = []
, public capabilities: Capability[] = []
, public volume: (Volume | null) = null) {
}
}

View File

@@ -1,19 +1,20 @@
"use strict";
import { Capability } from "../enums";
import CredentialsData from "./CredentialsData";
import Timeout from "./Timeout";
import { Capability } from "../enums";
// https://developers.google.com/cast/docs/reference/chrome/chrome.cast.SessionRequest
export default class SessionRequest {
public language: (string | null) = null;
public dialRequest: any = null;
constructor (
public appId: string
, public capabilities = [
Capability.VIDEO_OUT
, Capability.AUDIO_OUT ]
, public requestSessionTimeout: number
= (new Timeout()).requestSession) {}
, public capabilities = [ Capability.VIDEO_OUT
, Capability.AUDIO_OUT ]
, public timeout: number = (new Timeout()).requestSession
, public androidReceiverCompatible = false
, public credentialsData: (CredentialsData | null) = null) {}
}

View File

@@ -3,6 +3,7 @@
import logger from "../../lib/logger";
import ApiConfig from "./classes/ApiConfig";
import CredentialsData from "./classes/CredentialsData";
import DialRequest from "./classes/DialRequest";
import Error_ from "./classes/Error";
import Image_ from "./classes/Image";
@@ -56,14 +57,13 @@ let sessionErrorCallback: ErrorCallback;
export {
// Enums
AutoJoinPolicy, Capability, DefaultActionPolicy, DialAppState
, ErrorCode, ReceiverAction, ReceiverAvailability, ReceiverType
, SenderPlatform, SessionStatus, VolumeControlType
AutoJoinPolicy, Capability, DefaultActionPolicy, DialAppState, ErrorCode
, ReceiverAction, ReceiverAvailability, ReceiverType, SenderPlatform
, SessionStatus, VolumeControlType
// Classes
, ApiConfig, DialRequest, ReceiverDisplayStatus
, SenderApplication, Session, SessionRequest, Timeout
, Volume
, ApiConfig, CredentialsData, DialRequest, ReceiverDisplayStatus
, SenderApplication, Session, SessionRequest, Timeout, Volume
, Error_ as Error
, Image_ as Image

View File

@@ -0,0 +1,16 @@
"use strict";
import Image from "../../classes/Image";
import { MetadataType } from "../enums";
export default class AudiobookChapterMediaMetadata {
public bookTitle?: string;
public chapterNumber?: number;
public chapterTitle?: string;
public images?: Image[];
public subtitle?: string;
public title?: string;
public type = MetadataType.AUDIOBOOK_CHAPTER;
}

View File

@@ -0,0 +1,8 @@
"use strict";
export default class AudiobookContainerMetadata {
public authors?: string[];
public narrators?: string[];
public publisher?: string;
public releaseDate?: string;
}

View File

@@ -0,0 +1,11 @@
"use strict";
export default class Break {
public duration?: number;
public isEmbedded?: boolean;
public isWatched = false;
constructor(public id: string
, public breakClipIds: string[]
, public position: number) {}
}

View File

@@ -0,0 +1,22 @@
"use strict";
import VastAdsRequest from "./VastAdsRequest";
import { HlsSegmentFormat } from "../enums";
export default class BreakClip {
public clickThroughUrl?: string;
public contentId?: string;
public contentType?: string;
public contentUrl?: string;
public customData?: {};
public duration?: number;
public hlsSegmentFormat?: HlsSegmentFormat;
public posterUrl?: string;
public title?: string;
public vastAdsRequest?: VastAdsRequest;
public whenSkippable?: number;
constructor(public id: string) {}
}

View File

@@ -0,0 +1,9 @@
"use strict";
export default class BreakStatus {
public breakClipId?: string;
public breakId?: string;
public currentBreakClipTime?: number;
public currentBreakTime?: number;
public whenSkippable?: number;
}

View File

@@ -0,0 +1,17 @@
"use strict";
import Image from "../../classes/Image";
import MediaMetadata from "../classes/MediaMetadata";
import { ContainerType } from "../enums";
export default class ContainerMetadata {
public containerDuration?: number;
public containerImages?: Image[];
public sections?: MediaMetadata[];
public title?: string;
constructor (public containerType: ContainerType
= ContainerType.GENERIC_CONTAINER) {}
}

View File

@@ -0,0 +1,8 @@
"use strict";
export default class LiveSeekableRange {
constructor (public start?: number
, public end?: number
, public isMovingWindow?: boolean
, public isLiveDone?: boolean) {}
}

View File

@@ -5,6 +5,8 @@ import MediaInfo from "./MediaInfo";
export default class LoadRequest {
public activeTrackIds: (number[] | null) = null;
public atvCredentials?: string;
public atvCredentialsType?: string;
public autoplay: (boolean | null) = true;
public currentTime: (number | null) = null;
public customData: any = null;

View File

@@ -4,17 +4,21 @@ import logger from "../../../../lib/logger";
import uuid from "uuid/v1";
import BreakStatus from "./BreakStatus";
import EditTracksInfoRequest from "./EditTracksInfoRequest";
import GetStatusRequest from "./GetStatusRequest";
import LiveSeekableRange from "./LiveSeekableRange";
import MediaInfo from "./MediaInfo";
import PauseRequest from "./PauseRequest";
import PlayRequest from "./PlayRequest";
import QueueData from "./QueueData";
import QueueInsertItemsRequest from "./QueueInsertItemsRequest";
import QueueItem from "./QueueItem";
import QueueReorderItemsRequest from "./QueueReorderItemsRequest";
import QueueUpdateItemsRequest from "./QueueUpdateItemsRequest";
import SeekRequest from "./SeekRequest";
import StopRequest from "./StopRequest";
import VideoInformation from "./VideoInformation";
import VolumeRequest from "./VolumeRequest";
import Volume from "../../classes/Volume";
@@ -96,18 +100,22 @@ export default class Media {
});
public activeTrackIds: (number[] | null) = null;
public breakStatus?: BreakStatus;
public currentItemId: (number | null) = null;
public customData: any = null;
public currentTime: number = 0;
public idleReason: (string | null) = null;
public items: (QueueItem[] | null) = null;
public liveSeekableRange?: LiveSeekableRange;
public loadingItemId: (number | null) = null;
public media: (MediaInfo | null) = null;
public playbackRate: number = 1;
public playerState: string = PlayerState.IDLE;
public preloadedItemId: (number | null) = null;
public queueData?: QueueData;
public repeatMode: string = RepeatMode.OFF;
public supportedMediaCommands: string[] = [];
public videoInfo?: VideoInformation;
public volume: Volume = new Volume();
@@ -139,6 +147,16 @@ export default class Media {
logger.info("STUB :: Media#editTracksInfo");
}
public getEstimatedBreakClipTime () {
logger.info("STUB :: Media#getEstimatedBreakClipTime");
}
public getEstimatedBreakTime () {
logger.info("STUB :: Media#getEstimatedBreakTime");
}
public getEstimatedLiveSeekableRange () {
logger.info("STUB :: Media#getEstimatedLiveSeekableRange");
}
public getEstimatedTime (): number {
if (this.currentTime === undefined
|| this.#lastCurrentTime === undefined) {

View File

@@ -1,15 +1,20 @@
"use strict";
import Break from "./Break";
import BreakClip from "./BreakClip";
import GenericMediaMetadata from "./GenericMediaMetadata";
import MovieMediaMetadata from "./MovieMediaMetadata";
import MusicTrackMediaMetadata from "./MusicTrackMediaMetadata";
import PhotoMediaMetadata from "./PhotoMediaMetadata";
import TvShowMediaMetadata from "./TvShowMediaMetadata";
import TextTrackStyle from "./TextTrackStyle";
import Track from "./Track";
import UserActionState from "./UserActionState";
import VastAdsRequest from "./VastAdsRequest";
import { StreamType } from "../enums";
import { HlsSegmentFormat
, HlsVideoSegmentFormat
, StreamType } from "../enums";
type Metadata =
@@ -20,12 +25,22 @@ type Metadata =
| TvShowMediaMetadata;
export default class MediaInfo {
public atvEntity?: string;
public breakClips?: BreakClip[];
public breaks?: Break[];
public customData: any = null;
public contentUrl?: string;
public duration: (number | null) = null;
public entity?: string;
public hlsSegmentFormat?: HlsSegmentFormat;
public hlsVideoSegmentFormat?: HlsVideoSegmentFormat;
public metadata: (Metadata | null) = null;
public startAbsoluteTime?: number;
public streamType: string = StreamType.BUFFERED;
public textTrackStyle: (TextTrackStyle | null) = null;
public tracks: (Track[] | null) = null;
public userActionStates?: UserActionState[];
public vmapAdsRequest?: VastAdsRequest;
constructor (
public contentId: string

View File

@@ -0,0 +1,19 @@
"use strict";
import { MetadataType } from "../enums";
export default class MediaMetadata {
public queueItemId?: number;
public sectionDuration?: number;
public sectionStartAbsoluteTime?: number;
public sectionStartTimeInContainer?: number;
public sectionStartTimeInMedia?: number;
public type: MetadataType;
public metadataType: MetadataType;
constructor (type: MetadataType) {
this.type = type;
this.metadataType = type;
}
}

View File

@@ -0,0 +1,18 @@
"use strict";
import QueueItem from "./QueueItem";
import { RepeatMode } from "../enums";
export default class QueueData {
public shuffle = false;
constructor(public id?: string
, public name?: string
, public description?: string
, public repeatMode?: RepeatMode
, public items?: QueueItem[]
, public startIndex?: number
, public startTime?: number) {}
}

View File

@@ -0,0 +1,10 @@
"use strict";
import { UserAction } from "../enums";
export default class UserActionState {
public customData: any = null;
constructor (public userAction: UserAction) {}
}

View File

@@ -0,0 +1,6 @@
"use strict";
export default class VastAdsRequest {
public adsResponse?: string;
public adTagUrl?: string;
}

View File

@@ -0,0 +1,10 @@
"use strict";
import { HdrType } from "../enums";
export default class VideoInformation {
constructor (public width: number
, public height: number
, public hdrType: HdrType) {}
}

View File

@@ -1,5 +1,31 @@
"use strict";
export enum ContainerType {
GENERIC_CONTAINER
, AUDIOBOOK_CONTAINER
}
export enum HdrType {
SDR = "sdr"
, HDR = "hdr"
, DV = "dv"
}
export enum HlsSegmentFormat {
AAC = "aac"
, AC3 = "ac3"
, MP3 = "mp3"
, TS = "ts"
, TS_AAC = "ts_aac"
, E_AC3 = "e_ac3"
, FMP4 = "fmp4"
}
export enum HlsVideoSegmentFormat {
MPEG2_TS = "mpeg2_ts"
, FMP4 = "fmp4"
}
export enum IdleReason {
CANCELLED = "CANCELLED"
, INTERRUPTED = "INTERRUPTED"
@@ -20,6 +46,7 @@ export enum MetadataType {
, TV_SHOW
, MUSIC_TRACK
, PHOTO
, AUDIOBOOK_CHAPTER
}
export enum PlayerState {
@@ -29,6 +56,18 @@ export enum PlayerState {
, BUFFERING = "BUFFERING"
}
export enum QueueType {
ALBUM = "ALBUM"
, PLAYLIST = "PLAYLIST"
, AUDIOBOOK = "AUDIOBOOK"
, RADIO_STATION = "RADIO_STATION"
, PODCAST_SERIES = "PODCAST_SERIES"
, TV_SERIES = "TV_SERIES"
, VIDEO_PLAYLIST = "VIDEO_PLAYLIST"
, LIVE_TV = "LIVETV"
, MOVIE = "MOVIE"
}
export enum RepeatMode {
OFF = "REPEAT_OFF"
, ALL = "REPEAT_ALL"
@@ -91,3 +130,10 @@ export enum TrackType {
, AUDIO = "AUDIO"
, VIDEO = "VIDEO"
}
export enum UserAction {
LIKE = "LIKE"
, DISLIKE = "DISLIKE"
, FOLLOW = "FOLLOW"
, UNFOLLOW = "UNFOLLOW"
}

View File

@@ -1,16 +1,25 @@
"use strict";
import AudiobookChapterMediaMetadata from "./classes/AudiobookChapterMediaMetadata";
import AudiobookContainerMetadata from "./classes/AudiobookContainerMetadata";
import Break from "./classes/Break";
import BreakClip from "./classes/BreakClip";
import BreakStatus from "./classes/BreakStatus";
import ContainerMetadata from "./classes/ContainerMetadata";
import EditTracksInfoRequest from "./classes/EditTracksInfoRequest";
import GenericMediaMetadata from "./classes/GenericMediaMetadata";
import GetStatusRequest from "./classes/GetStatusRequest";
import LiveSeekableRange from "./classes/LiveSeekableRange";
import LoadRequest from "./classes/LoadRequest";
import Media from "./classes/Media";
import MediaInfo from "./classes/MediaInfo";
import MediaMetadata from "./classes/MediaMetadata";
import MovieMediaMetadata from "./classes/MovieMediaMetadata";
import MusicTrackMediaMetadata from "./classes/MusicTrackMediaMetadata";
import PauseRequest from "./classes/PauseRequest";
import PhotoMediaMetadata from "./classes/PhotoMediaMetadata";
import PlayRequest from "./classes/PlayRequest";
import QueueData from "./classes/QueueData";
import QueueInsertItemsRequest from "./classes/QueueInsertItemsRequest";
import QueueItem from "./classes/QueueItem";
import QueueLoadRequest from "./classes/QueueLoadRequest";
@@ -23,12 +32,20 @@ import StopRequest from "./classes/StopRequest";
import TextTrackStyle from "./classes/TextTrackStyle";
import Track from "./classes/Track";
import TvShowMediaMetadata from "./classes/TvShowMediaMetadata";
import UserActionState from "./classes/QueueItem";
import VastAdsRequest from "./classes/VastAdsRequest";
import VideoInformation from "./classes/VideoInformation";
import VolumeRequest from "./classes/VolumeRequest";
import { IdleReason
import { ContainerType
, HdrType
, HlsSegmentFormat
, HlsVideoSegmentFormat
, IdleReason
, MediaCommand
, MetadataType
, PlayerState
, QueueType
, RepeatMode
, ResumeState
, StreamType
@@ -37,24 +54,28 @@ import { IdleReason
, TextTrackFontStyle
, TextTrackType
, TextTrackWindowType
, TrackType } from "./enums";
, TrackType
, UserAction } from "./enums";
export {
// Enums
IdleReason, MediaCommand, MetadataType, PlayerState
, RepeatMode, ResumeState, StreamType, TextTrackEdgeType
, TextTrackFontGenericFamily, TextTrackFontStyle, TextTrackType
, TextTrackWindowType, TrackType
ContainerType, HdrType, HlsSegmentFormat, HlsVideoSegmentFormat, IdleReason
, MediaCommand, MetadataType, PlayerState, QueueType, RepeatMode, ResumeState
, StreamType, TextTrackEdgeType, TextTrackFontGenericFamily
, TextTrackFontStyle, TextTrackType, TextTrackWindowType, TrackType
, UserAction
// Classes
, EditTracksInfoRequest, GenericMediaMetadata, GetStatusRequest, LoadRequest
, Media, MediaInfo, MovieMediaMetadata, MusicTrackMediaMetadata
, PauseRequest, PhotoMediaMetadata, PlayRequest, QueueInsertItemsRequest
, AudiobookChapterMediaMetadata, AudiobookContainerMetadata, Break, BreakClip
, BreakStatus, ContainerMetadata, EditTracksInfoRequest, GenericMediaMetadata
, GetStatusRequest, LiveSeekableRange, LoadRequest, Media, MediaInfo
, MediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata, PauseRequest
, PhotoMediaMetadata, PlayRequest, QueueInsertItemsRequest, QueueData
, QueueItem, QueueLoadRequest, QueueRemoveItemsRequest
, QueueReorderItemsRequest, QueueSetPropertiesRequest, QueueUpdateItemsRequest
, SeekRequest, StopRequest, TextTrackStyle, Track
, TvShowMediaMetadata, VolumeRequest
, SeekRequest, StopRequest, TextTrackStyle, Track, TvShowMediaMetadata
, UserActionState, VastAdsRequest, VideoInformation, VolumeRequest
};
export const timeout = {