From 4b5d02f17b3899f26192be027343abf80c1a4034 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Sat, 14 Nov 2026 01:33:37 +0000 Subject: [PATCH] playback: keep detached fallback out of published position --- .../main/kotlin/com/subtracks/playback/PlaybackController.kt | 5 +++-- .../kotlin/com/subtracks/playback/PlaybackControllerTest.kt | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/kotlin/com/subtracks/playback/PlaybackController.kt b/app/src/main/kotlin/com/subtracks/playback/PlaybackController.kt index 971f641e..93a62daa 100644 --- a/app/src/main/kotlin/com/subtracks/playback/PlaybackController.kt +++ b/app/src/main/kotlin/com/subtracks/playback/PlaybackController.kt @@ -1863,6 +1863,7 @@ class PlaybackController( private fun refresh(position: Long? = currentQueuePosition()) { val player = player ?: return + val publishedPosition = if (detachedWindow && currentPosition() == null) lastPosition ?: detachedPosition else position updateBuffering() val durationMs = player.durationMs.takeIf { it > 0 } @@ -1871,8 +1872,8 @@ class PlaybackController( _state.value = PlaybackState( item = player.currentItem, - context = contextAt(position), - position = position, + context = contextAt(publishedPosition), + position = publishedPosition, isBuffering = showBuffering, isPlaying = player.playWhenReady && !player.isIdle && !player.isEnded, durationMs = durationMs, diff --git a/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt b/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt index 1c68ad68..b4b3828b 100644 --- a/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt +++ b/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt @@ -4286,6 +4286,7 @@ class PlaybackControllerTest { runBlocking { queues.resetChangedOrigins(setOf(QueueOrigin(QueueKind.Playlist, 1, "p1")), point) } await { handle.items.map { it.id } == listOf("s2") && controller.state.value.position == null } controller.cycleRepeat() + assertNull(controller.state.value.position) assertEquals(RepeatMode.All, controller.state.value.repeat) }