diff --git a/app/src/main/kotlin/com/subtracks/data/repo/QueueRepository.kt b/app/src/main/kotlin/com/subtracks/data/repo/QueueRepository.kt index 75668c2c..73f66649 100644 --- a/app/src/main/kotlin/com/subtracks/data/repo/QueueRepository.kt +++ b/app/src/main/kotlin/com/subtracks/data/repo/QueueRepository.kt @@ -190,8 +190,14 @@ class QueueRepository( ?.takeIf { it.isNotBlank() } } + // An explicit song entry in the middle of a queue is a reordered context track, so + // label it by its album rather than losing the context name. QueueKind.Song -> { - null + library + .song(sourceId, refId) + .first() + ?.album + ?.takeIf { it.isNotBlank() } } } } diff --git a/app/src/main/kotlin/com/subtracks/ui/playback/QueueScreen.kt b/app/src/main/kotlin/com/subtracks/ui/playback/QueueScreen.kt index a2fb18fb..21ecd826 100644 --- a/app/src/main/kotlin/com/subtracks/ui/playback/QueueScreen.kt +++ b/app/src/main/kotlin/com/subtracks/ui/playback/QueueScreen.kt @@ -349,9 +349,6 @@ fun QueueScreen( val last = info.visibleItemsInfo.lastOrNull { it.key is Long }?.let { rows.rowIndexOf(it.key) } ?: -1 first to last }.collect { (first, last) -> - // Mid-drag the live reorder leaves row positions inconsistent, so extending here would - // re-add rows that are already loaded. - if (dragId != null) return@collect if (first in 0..LOAD_THRESHOLD) onLoadOlder() if (last >= 0 && last >= rows.size - 1 - LOAD_THRESHOLD) onLoadNewer() } diff --git a/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt b/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt index 3f76a33a..538148f6 100644 --- a/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt +++ b/app/src/test/kotlin/com/subtracks/playback/PlaybackControllerTest.kt @@ -1001,6 +1001,25 @@ class PlaybackControllerTest { assertEquals(runBlocking { queues.combinedIndexOf(snapshot, "s3") }, controller.state.value.position) } + @Test + fun movingThePlayingContextTrackStillResolvesAnAlbumTitle() { + seedAlbum(3, sourceId = 1) + + controller.playAlbum(1, "al1", 1) + await { + controller.state.value.item + ?.id == "s2" + } + + runBlocking { controller.move(1, 0) } + await { + controller.state.value.item + ?.id == "s2" + } + + assertEquals("Album", runBlocking { controller.sourceTitle(controller.state.value.context) }) + } + @Test fun nextFollowsTheReorderedQueue() { seedAlbum(3, sourceId = 1)