update castingInternal to avoid errors

This commit is contained in:
Pas 2025-03-15 22:06:41 -07:00
parent 3d3209f4aa
commit 78b83ed8be

View file

@ -1,4 +1,4 @@
import { useEffect, useRef } from "react"; import { useCallback, useEffect, useRef } from "react";
import { mediaItemTypeToMediaType } from "@/backend/metadata/tmdb"; import { mediaItemTypeToMediaType } from "@/backend/metadata/tmdb";
import { makeVideoElementDisplayInterface } from "@/components/player/display/base"; import { makeVideoElementDisplayInterface } from "@/components/player/display/base";
@ -80,38 +80,67 @@ export function CastingInternal() {
}); });
}, [metaTitle, metaType, display]); }, [metaTitle, metaType, display]);
useEffect(() => { const connectionChanged = useCallback(
if (!available) return; (e: cast.framework.RemotePlayerChangedEvent) => {
const ins = cast.framework.CastContext.getInstance();
setInstance(ins);
ins.setOptions({
receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,
autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED,
});
const newPlayer = new cast.framework.RemotePlayer();
setPlayer(newPlayer);
const newControlller = new cast.framework.RemotePlayerController(newPlayer);
setController(newControlller);
function connectionChanged(e: cast.framework.RemotePlayerChangedEvent) {
if (e.field === "isConnected") { if (e.field === "isConnected") {
setIsCasting(e.value); setIsCasting(e.value);
} }
} },
newControlller.addEventListener( [setIsCasting],
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, );
connectionChanged,
);
return () => { useEffect(() => {
newControlller.removeEventListener( if (!available || !window.cast || !window.chrome || !window.chrome.cast)
return;
if (!chrome.cast || !chrome.cast.media) {
console.error(
"Chrome Cast API not fully initialized: chrome.cast.media is undefined",
);
return;
}
try {
const ins = cast.framework.CastContext.getInstance();
setInstance(ins);
const receiverAppId = chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID;
const autoJoinPolicy = chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED;
ins.setOptions({
receiverApplicationId: receiverAppId,
autoJoinPolicy,
});
const newPlayer = new cast.framework.RemotePlayer();
setPlayer(newPlayer);
const newControlller = new cast.framework.RemotePlayerController(
newPlayer,
);
setController(newControlller);
newControlller.addEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED, cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
connectionChanged, connectionChanged,
); );
};
}, [available, setPlayer, setController, setInstance, setIsCasting]); return () => {
newControlller.removeEventListener(
cast.framework.RemotePlayerEventType.IS_CONNECTED_CHANGED,
connectionChanged,
);
};
} catch (error) {
console.error("Error initializing Chromecast:", error);
}
}, [
available,
setPlayer,
setController,
setInstance,
setIsCasting,
connectionChanged,
]);
return null; return null;
} }