From d964df4616937b9febcc203a29664886e5564d6e Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 27 Dec 2024 15:49:02 -0500 Subject: [PATCH] musikr: fix broken cover cleanup --- .../main/java/org/oxycblt/auxio/music/MusicRepository.kt | 2 +- .../java/org/oxycblt/auxio/music/covers/SiloedCovers.kt | 7 +++---- musikr/src/main/java/org/oxycblt/musikr/cover/Covers.kt | 8 +++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt index c24dff5ee..1172a2e81 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/MusicRepository.kt @@ -435,7 +435,7 @@ constructor( // Old cover revisions may be lying around, even during a normal refresh due // to really lucky cancellations. Clean those up now that it's impossible for // the rest of the app to be using them. - covers.cleanup(newLibrary) + covers.cleanup(newLibrary.songs.mapNotNull { it.cover }) } private suspend fun emitIndexingProgress(progress: IndexingProgress) { diff --git a/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt b/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt index d60cd375b..c0ebc40f6 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/covers/SiloedCovers.kt @@ -23,7 +23,6 @@ import java.io.File import java.util.UUID import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import org.oxycblt.musikr.Library import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.cover.CoverFiles import org.oxycblt.musikr.cover.CoverFormat @@ -48,8 +47,8 @@ class SiloedCovers( override suspend fun write(data: ByteArray) = SiloedCover(silo, inner.write(data)) - override suspend fun cleanup(assuming: Library) { - inner.cleanup(assuming) + override suspend fun cleanup(excluding: Collection) { + inner.cleanup(excluding.filterIsInstance().map { it.innerCover }) // Destroy old revisions no longer being used. withContext(Dispatchers.IO) { @@ -88,7 +87,7 @@ data class CoverSilo(val revision: UUID, val params: CoverParams) { } } -class SiloedCover(silo: CoverSilo, private val innerCover: Cover) : Cover by innerCover { +class SiloedCover(silo: CoverSilo, val innerCover: Cover) : Cover by innerCover { private val innerId = SiloedCoverId(silo, innerCover.id) override val id = innerId.toString() } diff --git a/musikr/src/main/java/org/oxycblt/musikr/cover/Covers.kt b/musikr/src/main/java/org/oxycblt/musikr/cover/Covers.kt index d2fa7304d..93c87e2c7 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/cover/Covers.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/cover/Covers.kt @@ -18,8 +18,6 @@ package org.oxycblt.musikr.cover -import org.oxycblt.musikr.Library - interface Covers { suspend fun obtain(id: String): ObtainResult @@ -35,7 +33,7 @@ interface Covers { interface MutableCovers : Covers { suspend fun write(data: ByteArray): Cover - suspend fun cleanup(assuming: Library) + suspend fun cleanup(excluding: Collection) } sealed interface ObtainResult { @@ -64,8 +62,8 @@ private class FileCovers( return FileCover(id, file) } - override suspend fun cleanup(assuming: Library) { - val used = assuming.songs.mapNotNullTo(mutableSetOf()) { it.cover?.id?.let(::getFileName) } + override suspend fun cleanup(excluding: Collection) { + val used = excluding.mapTo(mutableSetOf()) { getFileName(it.id) } coverFiles.deleteWhere { it !in used } }