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]);