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.
 
 
 
 
 

86 lines
2.2 KiB

import { updateInterface } from "@/video/state/logic/interface";
import { updateMeta } from "@/video/state/logic/meta";
import { VideoPlayerMeta } from "@/video/state/types";
import { getPlayerState } from "../cache";
import { VideoPlayerStateController } from "../providers/providerTypes";
export type ControlMethods = {
openPopout(id: string): void;
closePopout(): void;
setLeftControlsHover(hovering: boolean): void;
setFocused(focused: boolean): void;
setMeta(data?: VideoPlayerMeta): void;
setCurrentEpisode(sId: string, eId: string): void;
};
export function useControls(
descriptor: string
): VideoPlayerStateController & ControlMethods {
const state = getPlayerState(descriptor);
return {
// state provider controls
pause() {
state.stateProvider?.pause();
},
play() {
state.stateProvider?.play();
},
setSource(source) {
state.stateProvider?.setSource(source);
},
setSeeking(active) {
state.stateProvider?.setSeeking(active);
},
setTime(time) {
state.stateProvider?.setTime(time);
},
exitFullscreen() {
state.stateProvider?.exitFullscreen();
},
enterFullscreen() {
state.stateProvider?.enterFullscreen();
},
setVolume(volume) {
state.stateProvider?.setVolume(volume);
},
startAirplay() {
state.stateProvider?.startAirplay();
},
// other controls
setLeftControlsHover(hovering) {
state.interface.leftControlHovering = hovering;
updateInterface(descriptor, state);
},
openPopout(id: string) {
state.interface.popout = id;
updateInterface(descriptor, state);
},
closePopout() {
state.interface.popout = null;
updateInterface(descriptor, state);
},
setFocused(focused) {
state.interface.isFocused = focused;
updateInterface(descriptor, state);
},
setMeta(meta) {
if (!meta) {
state.meta = null;
} else {
state.meta = meta;
}
updateMeta(descriptor, state);
},
setCurrentEpisode(sId, eId) {
if (state.meta) {
state.meta.episode = {
seasonId: sId,
episodeId: eId,
};
updateMeta(descriptor, state);
}
},
};
}