import type { HybridObject } from "react-native-nitro-modules"; import type { CastLoadRequest, OmniEvents } from "../types/events"; import type { CastStatus, OmniPlayerState, OmniPlayer as OmniPlayerT, PlayerBackend, PlayerStatus, Rendition, Track, } from "../types/player"; import type { CastOptions, Source } from "../types/source"; export type NumberProperty = Exclude< keyof OmniPlayerState, | "status" | "isPlaying" | "muted" | "source" | "videos" | "audios" | "subtitles" | "renditions" >; export type BoolProperty = "isPlaying" | "muted" | "isAutoQuality"; export type TrackProperty = "videos" | "audios" | "subtitles"; export interface OmniEventMap extends HybridObject<{ android: "kotlin" }> { addStateListener( key: NumberProperty, cb: (value: number) => void, ): () => void; addStateBoolListener( key: BoolProperty, cb: (value: boolean) => void, ): () => void; addPlayerStatusListener(cb: (value: PlayerStatus) => void): () => void; addCastStatusListener(cb: (value: CastStatus) => void): () => void; addSourceListener(cb: (value?: Source) => void): () => void; addTracksListener( key: TrackProperty, cb: (value: Track[]) => void, ): () => void; addRenditionsListener(cb: (value: Rendition[]) => void): () => void; addOnEndListener(cb: OmniEvents["end"]): () => void; addOnPrevListener(cb: OmniEvents["prev"]): () => void; addOnNextListener(cb: OmniEvents["next"]): () => void; addOnErrorListener(cb: OmniEvents["error"]): () => void; addOnAudioFocusChangeListener(cb: OmniEvents["audioFocusChange"]): () => void; addOnVideoTrackChangeListener(cb: OmniEvents["videoTrackChange"]): () => void; addOnAudioTrackChangeListener(cb: OmniEvents["audioTrackChange"]): () => void; addOnSubtitleChangeListener(cb: OmniEvents["subtitleChange"]): () => void; addOnRenditionChangeListener(cb: OmniEvents["renditionChange"]): () => void; } export interface OmniPlayer extends HybridObject<{ android: "kotlin" }>, OmniPlayerT { readonly eventMap: OmniEventMap; // let go of the player. it stays alive as long as it holds a cast session (android). abandon(): void; } export interface OmniPlayerFactory extends HybridObject<{ android: "kotlin" }> { createPlayer(backend?: PlayerBackend, cast?: CastOptions): OmniPlayer; addCastLoadListener( cb: (request: CastLoadRequest) => Promise, ): () => void; }