From 481f12c8927d5b9beebf008e9de9b1075adb9072 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Sat, 14 Nov 2026 05:35:12 +0000 Subject: [PATCH] sync: preserve legacy identity during queue resets --- .../main/kotlin/com/subtracks/data/repo/QueueRepository.kt | 6 +++--- app/src/test/kotlin/com/subtracks/data/db/MigrationsTest.kt | 6 +++++- .../kotlin/com/subtracks/data/repo/QueueRepositoryTest.kt | 3 +++ 3 files changed, 11 insertions(+), 4 deletions(-) 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 8b30c504..94bf7cbb 100644 --- a/app/src/main/kotlin/com/subtracks/data/repo/QueueRepository.kt +++ b/app/src/main/kotlin/com/subtracks/data/repo/QueueRepository.kt @@ -704,13 +704,13 @@ class QueueRepository( val positionMs = if (remappedCurrent != null && previousSongId == updatedSongId) row.positionMs else 0L dao.clear() dao.insert( - withOriginEntryIds(entries).mapIndexed { index, entry -> + withOriginEntryIds(entries, assignFragmentIds = false).mapIndexed { index, entry -> entry.copy(id = 0, position = index.toLong()) }, ) dao.clearUpNext() dao.insertUpNext( - withOriginEntryIds(upNext).mapIndexed { index, entry -> + withOriginEntryIds(upNext, assignFragmentIds = false).mapIndexed { index, entry -> UpNextEntry.from(entry).copy(id = 0, position = index.toLong()) }, ) @@ -831,7 +831,7 @@ class QueueRepository( } private fun QueueEntry.shouldAssignOriginEntryId(assignFragmentIds: Boolean) = - originEntryId == null && (assignFragmentIds || isWholeOrigin()) + originEntryId == null && (assignFragmentIds || isWholeOrigin() || id == 0L) private fun withOriginEntryIds( entries: List, diff --git a/app/src/test/kotlin/com/subtracks/data/db/MigrationsTest.kt b/app/src/test/kotlin/com/subtracks/data/db/MigrationsTest.kt index 08587138..24f4e6f1 100644 --- a/app/src/test/kotlin/com/subtracks/data/db/MigrationsTest.kt +++ b/app/src/test/kotlin/com/subtracks/data/db/MigrationsTest.kt @@ -11,6 +11,7 @@ import com.subtracks.data.model.PlaylistSong import com.subtracks.data.model.QueueKind import com.subtracks.data.model.QueueOrigin import com.subtracks.data.repo.QueueRepository +import com.subtracks.data.repo.QueueResetPreparation import com.subtracks.data.repo.removeAt import com.subtracks.data.repo.replace import kotlinx.coroutines.test.runTest @@ -592,7 +593,10 @@ class MigrationsTest { repository.setCursor(2) val point = repository.captureResetPoint() var resets = 0 - repository.setResetListener { resets++ } + repository.setResetListener { + resets++ + QueueResetPreparation(it.snapshot) + } db.libraryDao().deletePlaylistSongsFrom(1, "p1", 0) db.libraryDao().upsertPlaylistSongs( listOf( diff --git a/app/src/test/kotlin/com/subtracks/data/repo/QueueRepositoryTest.kt b/app/src/test/kotlin/com/subtracks/data/repo/QueueRepositoryTest.kt index 9dd313d4..cb293980 100644 --- a/app/src/test/kotlin/com/subtracks/data/repo/QueueRepositoryTest.kt +++ b/app/src/test/kotlin/com/subtracks/data/repo/QueueRepositoryTest.kt @@ -474,6 +474,9 @@ class QueueRepositoryTest { repository.removeAt(snapshot, 0) assertEquals(listOf("s2", "s3"), resolveAll(repository.snapshot())) + } + + @Test fun aMatchingOriginStillPublishesWhenItsEntriesDoNotChange() = runTest { seedLibrary()