A small web app for watching movies and shows easily
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

73 lines
1.8 KiB

import { MWMediaType } from "@/backend/metadata/types/mw";
import { LoadableSource, SourceQuality } from "@/stores/player/utils/qualities";
import { Listener } from "@/utils/events";
export type DisplayErrorType = "hls" | "htmlvideo" | "global";
export type DisplayError = {
stackTrace?: string;
message?: string;
key?: string;
errorName: string;
type: DisplayErrorType;
};
export type DisplayInterfaceEvents = {
play: void;
pause: void;
fullscreen: boolean;
volumechange: number;
time: number;
duration: number;
buffered: number;
loading: boolean;
qualities: SourceQuality[];
changedquality: SourceQuality | null;
needstrack: boolean;
canairplay: boolean;
playbackrate: number;
error: DisplayError;
};
export interface qualityChangeOptions {
source: LoadableSource | null;
automaticQuality: boolean;
preferredQuality: SourceQuality | null;
startAt: number;
}
export interface DisplayMeta {
title: string;
type: MWMediaType;
}
export interface DisplayCaption {
id: string;
srtData: string;
language: string;
url?: string;
}
export type DisplayType = "web" | "casting";
export interface DisplayInterface extends Listener<DisplayInterfaceEvents> {
play(): void;
pause(): void;
load(ops: qualityChangeOptions): void;
changeQuality(
automaticQuality: boolean,
preferredQuality: SourceQuality | null,
): void;
processVideoElement(video: HTMLVideoElement): void;
processContainerElement(container: HTMLElement): void;
toggleFullscreen(): void;
togglePictureInPicture(): void;
setSeeking(active: boolean): void;
setVolume(vol: number): void;
setTime(t: number): void;
destroy(): void;
startAirplay(): void;
setPlaybackRate(rate: number): void;
setMeta(meta: DisplayMeta): void;
setCaption(caption: DisplayCaption | null): void;
getType(): DisplayType;
}