fix(android): skip zero-duration auto-advance during UPnP playback
android / Build + lint + test (push) Failing after 1m26s
android / Build + lint + test (push) Failing after 1m26s
This commit is contained in:
@@ -61,6 +61,7 @@ class PlayerController @Inject constructor(
|
|||||||
@ApplicationScope private val scope: CoroutineScope,
|
@ApplicationScope private val scope: CoroutineScope,
|
||||||
private val radio: RadioController,
|
private val radio: RadioController,
|
||||||
private val playerFactory: PlayerFactory,
|
private val playerFactory: PlayerFactory,
|
||||||
|
private val activeUpnpHolder: com.fabledsword.minstrel.player.output.ActiveUpnpHolder,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -321,6 +322,11 @@ class PlayerController @Inject constructor(
|
|||||||
* and advance past the dead track. Otherwise no-op.
|
* and advance past the dead track. Otherwise no-op.
|
||||||
*/
|
*/
|
||||||
private fun handleZeroDurationIfNeeded(controller: MediaController, idx: Int) {
|
private fun handleZeroDurationIfNeeded(controller: MediaController, idx: Int) {
|
||||||
|
// Skip during UPnP playback. ExoPlayer is intentionally paused and never
|
||||||
|
// buffers tracks, so duration is permanently 0 / TIME_UNSET -- without
|
||||||
|
// this guard we rapid-advance through the entire local queue (and spam
|
||||||
|
// /api/playback-errors) every time the user activates a UPnP route.
|
||||||
|
if (activeUpnpHolder.active.value != null) return
|
||||||
val current = queueRefs.getOrNull(idx) ?: return
|
val current = queueRefs.getOrNull(idx) ?: return
|
||||||
val duration = controller.duration
|
val duration = controller.duration
|
||||||
val isZeroDuration = duration <= 0L || duration == androidx.media3.common.C.TIME_UNSET
|
val isZeroDuration = duration <= 0L || duration == androidx.media3.common.C.TIME_UNSET
|
||||||
|
|||||||
Reference in New Issue
Block a user