more chromecast fixes

Co-authored-by: Jip Frijlink <JipFr@users.noreply.github.com>
Co-authored-by: James Hawkins <jhawki2005@gmail.com>
Co-authored-by: William Oldham <wegg7250@gmail.com>
This commit is contained in:
mrjvs 2023-02-19 22:55:58 +01:00
parent b886443ea7
commit 398644951e
3 changed files with 18 additions and 2 deletions

View file

@ -4,6 +4,7 @@ import { useVideoPlayerDescriptor } from "@/video/state/hooks";
import { useMediaPlaying } from "@/video/state/logic/mediaplaying";
import { useProgress } from "@/video/state/logic/progress";
import { useControls } from "@/video/state/logic/controls";
import { useMisc } from "@/video/state/logic/misc";
interface Props {
startAt?: number;
@ -15,6 +16,7 @@ export function ProgressListenerController(props: Props) {
const mediaPlaying = useMediaPlaying(descriptor);
const progress = useProgress(descriptor);
const controls = useControls(descriptor);
const misc = useMisc(descriptor);
const didInitialize = useRef<true | null>(null);
const lastTime = useRef<number>(props.startAt ?? 0);
@ -46,6 +48,17 @@ export function ProgressListenerController(props: Props) {
didInitialize.current = true;
}, [didInitialize, props, progress, mediaPlaying, controls]);
// when switching state providers
// TODO stateProviderId is somehow ALWAYS "video"
const lastStateProviderId = useRef<string | null>(null);
const stateProviderId = useMemo(() => misc.stateProviderId, [misc]);
useEffect(() => {
if (lastStateProviderId.current === stateProviderId) return;
if (mediaPlaying.isFirstLoading) return;
lastStateProviderId.current = stateProviderId;
controls.setTime(lastTime.current);
}, [controls, mediaPlaying, stateProviderId]);
useEffect(() => {
// if it initialized, but media starts loading for the first time again.
// reset initalized so it will restore time again

View file

@ -176,7 +176,10 @@ export function createCastingStateProvider(
state.mediaPlaying.isLoading = e.value === "BUFFERING";
state.mediaPlaying.isPaused = e.value !== "PLAYING";
state.mediaPlaying.isPlaying = e.value === "PLAYING";
if (e.value === "PLAYING") state.mediaPlaying.hasPlayedOnce = true;
if (e.value === "PLAYING") {
state.mediaPlaying.hasPlayedOnce = true;
state.mediaPlaying.isFirstLoading = false;
}
updateMediaPlaying(descriptor, state);
break;
case "isMuted":

View file

@ -26,11 +26,11 @@ export function unsetStateProvider(
!state.stateProvider ||
state.stateProvider?.getId() !== stateProviderId
) {
state.stateProviderId = "video"; // go back to video when casting stops
return;
}
state.stateProvider = null;
state.stateProviderId = "video"; // go back to video when casting stops
updateMisc(descriptor, state);
}
export function handleBuffered(time: number, buffered: TimeRanges): number {