mirror of
https://github.com/austinried/subtracks.git
synced 2026-11-15 00:42:54 +01:00
queue: preserve fragmented origin entry identity
This commit is contained in:
@@ -613,6 +613,59 @@ class QueueRepositoryTest {
|
||||
assertEquals(3L, repository.snapshot().upNextAnchor)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun aChangedOriginResetRestoresFullyFragmentedDuplicateEntries() =
|
||||
runTest {
|
||||
seedLibrary()
|
||||
setPlaylist("p1", "s1", "s2")
|
||||
val initial =
|
||||
repository.snapshotAfter(listOf(repository.playlistEntry(1, "p1"), repository.playlistEntry(1, "p1")))
|
||||
repository.removeAt(initial, 0)
|
||||
repository.removeAt(repository.snapshot(), 1)
|
||||
repository = QueueRepository(db)
|
||||
repository.setCursor(1)
|
||||
repository.setPosition(42_000L)
|
||||
val point = repository.captureResetPoint()
|
||||
|
||||
repository.resetChangedOrigins(setOf(QueueOrigin(QueueKind.Playlist, 1, "p1")), point)
|
||||
|
||||
val updated = repository.snapshot()
|
||||
assertEquals(2, updated.entries.size)
|
||||
assertTrue(updated.entries.all { it.entry.rangeStart == null && it.entry.rangeEnd == null })
|
||||
assertEquals(listOf("s1", "s2", "s1", "s2"), resolveAll(updated))
|
||||
assertEquals(3L, repository.remapPosition(updated, point.current!!))
|
||||
assertEquals(3L, repository.cursor())
|
||||
assertEquals(42_000L, repository.cursorPositionMs())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun anUnrelatedOriginResetRemapsWithinTheSecondFullyFragmentedDuplicateEntry() =
|
||||
runTest {
|
||||
seedLibrary()
|
||||
db.libraryDao().upsertSongs(listOf(song("s0", "al1", track = 0, album = "First Album")))
|
||||
setPlaylist("p1", "s1", "s2")
|
||||
setPlaylist("p2", "s4")
|
||||
val initial =
|
||||
repository.snapshotAfter(
|
||||
listOf(
|
||||
repository.playlistEntry(1, "p2"),
|
||||
repository.playlistEntry(1, "p1"),
|
||||
repository.playlistEntry(1, "p1"),
|
||||
),
|
||||
)
|
||||
repository.removeAt(initial, 1)
|
||||
repository.removeAt(repository.snapshot(), 2)
|
||||
repository.setCursor(2)
|
||||
val point = repository.captureResetPoint()
|
||||
|
||||
setPlaylist("p2", "s0", "s4")
|
||||
repository.resetChangedOrigins(setOf(QueueOrigin(QueueKind.Playlist, 1, "p2")), point)
|
||||
|
||||
val updated = repository.snapshot()
|
||||
assertEquals(3L, repository.remapPosition(updated, point.current!!))
|
||||
assertEquals(3L, repository.cursor())
|
||||
}
|
||||
|
||||
@Test
|
||||
fun aResetRemapsTheSecondOccurrenceOfASongWithinAPlaylist() =
|
||||
runTest {
|
||||
|
||||
Reference in New Issue
Block a user