mirror of
https://github.com/zoriya/react-native-omni.git
synced 2026-08-16 02:44:51 +00:00
fix(web): make source a listenable state, fixes the view
This commit is contained in:
@@ -15,6 +15,7 @@ import androidx.media3.common.Player.STATE_BUFFERING
|
||||
import androidx.media3.common.Player.STATE_ENDED
|
||||
import androidx.media3.common.Player.STATE_IDLE
|
||||
import androidx.media3.common.Player.STATE_READY
|
||||
import androidx.media3.common.Timeline
|
||||
import androidx.media3.common.Tracks
|
||||
import androidx.media3.common.VideoSize
|
||||
import com.margelo.nitro.omni.BoolProperty
|
||||
@@ -23,6 +24,7 @@ import com.margelo.nitro.omni.HybridOmniEventMapSpec
|
||||
import com.margelo.nitro.omni.NumberProperty
|
||||
import com.margelo.nitro.omni.PlayerStatus
|
||||
import com.margelo.nitro.omni.Rendition
|
||||
import com.margelo.nitro.omni.Source
|
||||
import com.margelo.nitro.omni.Track
|
||||
|
||||
@SuppressLint("UnsafeOptInUsageError")
|
||||
@@ -40,6 +42,7 @@ class EventMap() : HybridOmniEventMapSpec(), Player.Listener {
|
||||
private val stateBoolListeners = mutableMapOf<BoolProperty, MutableSet<(Boolean) -> Unit>>()
|
||||
private val playerStatusListeners = mutableSetOf<(PlayerStatus) -> Unit>()
|
||||
private val castStatusListeners = mutableSetOf<(CastStatus) -> Unit>()
|
||||
private val sourceListeners = mutableSetOf<(Source?) -> Unit>()
|
||||
|
||||
private var lastMediaItemIndex = 0
|
||||
private var lastRendition: Rendition? = null
|
||||
@@ -92,6 +95,10 @@ class EventMap() : HybridOmniEventMapSpec(), Player.Listener {
|
||||
castStatusListeners.forEach { it(status) }
|
||||
}
|
||||
|
||||
fun emitSource(source: Source?) {
|
||||
sourceListeners.forEach { it(source) }
|
||||
}
|
||||
|
||||
private fun selectedTrack(trackType: Int): Track? {
|
||||
val groups = player.currentTracks.groups.filter { it.type == trackType }
|
||||
for (group in groups) {
|
||||
@@ -300,6 +307,14 @@ class EventMap() : HybridOmniEventMapSpec(), Player.Listener {
|
||||
castStatusListeners.remove(cb)
|
||||
}
|
||||
|
||||
override fun addSourceListener(cb: (value: Source?) -> Unit) {
|
||||
sourceListeners.add(cb)
|
||||
}
|
||||
|
||||
override fun removeSourceListener(cb: (value: Source?) -> Unit) {
|
||||
sourceListeners.remove(cb)
|
||||
}
|
||||
|
||||
override fun addOnEndListener(cb: () -> Unit) {
|
||||
onEndListeners.add(cb)
|
||||
}
|
||||
|
||||
@@ -306,6 +306,7 @@ class OmniPlayer(
|
||||
override var source: Source? = null
|
||||
set(value) {
|
||||
field = value
|
||||
eventMap.emitSource(value)
|
||||
if (value == null) {
|
||||
runOnMainThreadSync {
|
||||
player.clearMediaItems()
|
||||
|
||||
Reference in New Issue
Block a user