diff --git a/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt b/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt index c4b6f14..bbd7553 100644 --- a/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt +++ b/android/src/main/java/dev/zoriya/omni/OmniPlayer.kt @@ -466,6 +466,8 @@ class OmniPlayer( player.addListener(object : Player.Listener { override fun onMediaItemTransition(item: MediaItem?, reason: Int) = followMedia(item) }) + // check for cast rejoin + followMedia(player.currentMediaItem) } } diff --git a/example/App.tsx b/example/App.tsx index 1d032ea..2a04719 100644 --- a/example/App.tsx +++ b/example/App.tsx @@ -79,6 +79,7 @@ function PlayerExample({ const volume = usePlayerState("volume"); const isAutoQuality = usePlayerState("isAutoQuality"); const castStatus = usePlayerState("castStatus"); + const source = usePlayerState("source"); const [logs, setLogs] = useState<{ id: number; message: string }[]>([]); const logId = useRef(0); const tracks = { @@ -281,6 +282,9 @@ function PlayerExample({ Volume: {(volume * 100).toFixed(0)}% + + Source: {source?.metadata?.title ?? "(none)"} + diff --git a/src/provider.tsx b/src/provider.tsx index 80c16ab..46cb785 100755 --- a/src/provider.tsx +++ b/src/provider.tsx @@ -4,6 +4,7 @@ import { useContext, useEffect, useEffectEvent, + useRef, useState, } from "react"; import { NitroModules } from "react-native-nitro-modules"; @@ -47,10 +48,13 @@ export const OmniProvider = ({ return () => player.abandon(); }, [player]); + const inited = useRef(null); useEffect(() => { if (!player) return; - // early return on init to keep running cast sessions active - if (source == null && player.source == null) return; + if (inited.current !== player) { + inited.current = player; + if (source == null) return; + } player.source = source; }, [player, source]);