From 2e4a147b55d56358ce6fd4e3ddea2d43250bde8a Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Wed, 26 Feb 2025 16:57:22 -0700 Subject: [PATCH] musikr: fix custom covers not being obtained --- .../org/oxycblt/auxio/image/CoverProvider.kt | 2 +- .../auxio/image/covers/SettingCovers.kt | 13 +++++-------- .../auxio/image/covers/SiloedCovers.kt | 19 ++++++++++++++++--- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt b/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt index 0420594ff..7e709e9de 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt @@ -43,7 +43,7 @@ class CoverProvider @Inject constructor(private val settingCovers: SettingCovers } val id = uri.lastPathSegment ?: return null return runBlocking { - when (val result = settingCovers.obtain(requireNotNull(context), id)) { + when (val result = settingCovers.immutable(requireNotNull(context)).obtain(id)) { is CoverResult.Hit -> result.cover.fd() else -> null } diff --git a/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt b/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt index 0f2d928a6..b3541592e 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/covers/SettingCovers.kt @@ -27,11 +27,12 @@ import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.cover.CoverIdentifier import org.oxycblt.musikr.cover.CoverParams import org.oxycblt.musikr.cover.CoverResult +import org.oxycblt.musikr.cover.Covers import org.oxycblt.musikr.cover.FileCover import org.oxycblt.musikr.cover.MutableCovers interface SettingCovers { - suspend fun obtain(context: Context, id: String): CoverResult + suspend fun immutable(context: Context): Covers suspend fun mutate(context: Context, revision: UUID): MutableCovers } @@ -40,6 +41,9 @@ class SettingCoversImpl @Inject constructor(private val imageSettings: ImageSettings, private val identifier: CoverIdentifier) : SettingCovers { + override suspend fun immutable(context: Context): Covers = + CompatCovers(context, BaseSiloedCovers(context)) + override suspend fun mutate(context: Context, revision: UUID): MutableCovers = when (imageSettings.coverMode) { CoverMode.OFF -> NullCovers(context) @@ -48,13 +52,6 @@ constructor(private val imageSettings: ImageSettings, private val identifier: Co CoverMode.HIGH_QUALITY -> siloedCovers(context, revision, CoverParams.of(1000, 100)) } - override suspend fun obtain(context: Context, id: String): CoverResult { - val coverId = SiloedCoverId.parse(id) ?: return CoverResult.Miss() - val siloedCovers = SiloedCovers.from(context, coverId.silo) - val covers = CompatCovers(context, siloedCovers) - return covers.obtain(coverId.id) - } - private suspend fun siloedCovers(context: Context, revision: UUID, with: CoverParams) = MutableCompatCovers( context, MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier)) diff --git a/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt b/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt index 30985dfac..87c3f81e6 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/covers/SiloedCovers.kt @@ -15,7 +15,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ - + package org.oxycblt.auxio.image.covers import android.content.Context @@ -35,11 +35,23 @@ import org.oxycblt.musikr.fs.DeviceFile import org.oxycblt.musikr.fs.app.AppFiles import org.oxycblt.musikr.metadata.Metadata +class BaseSiloedCovers(private val context: Context) : Covers { + override suspend fun obtain(id: String): CoverResult { + val siloedId = SiloedCoverId.parse(id) ?: return CoverResult.Miss() + val core = SiloCore.from(context, siloedId.silo) + val fileCovers = FileCovers(core.files, core.format) + return when (val result = fileCovers.obtain(siloedId.id)) { + is CoverResult.Hit -> CoverResult.Hit(SiloedCover(siloedId.silo, result.cover)) + is CoverResult.Miss -> CoverResult.Miss() + } + } +} + open class SiloedCovers(private val silo: CoverSilo, private val fileCovers: FileCovers) : Covers { override suspend fun obtain(id: String): CoverResult { val coverId = SiloedCoverId.parse(id) ?: return CoverResult.Miss() - if (coverId.silo != silo) return CoverResult.Miss() + if (silo != coverId.silo) return CoverResult.Miss() return when (val result = fileCovers.obtain(coverId.id)) { is CoverResult.Hit -> CoverResult.Hit(SiloedCover(silo, result.cover)) is CoverResult.Miss -> CoverResult.Miss() @@ -84,7 +96,8 @@ private constructor( ): MutableSiloedCovers { val core = SiloCore.from(context, silo) return MutableSiloedCovers( - core.rootDir, silo, MutableFileCovers(core.files, core.format, coverIdentifier)) + core.rootDir, silo, MutableFileCovers(core.files, core.format, coverIdentifier) + ) } } }