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 7e709e9de..8e6963267 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/CoverProvider.kt @@ -32,8 +32,7 @@ import org.oxycblt.auxio.BuildConfig import org.oxycblt.auxio.image.covers.SettingCovers import org.oxycblt.musikr.cover.CoverResult -@AndroidEntryPoint -class CoverProvider @Inject constructor(private val settingCovers: SettingCovers) : +class CoverProvider() : ContentProvider() { override fun onCreate(): Boolean = true @@ -43,7 +42,7 @@ class CoverProvider @Inject constructor(private val settingCovers: SettingCovers } val id = uri.lastPathSegment ?: return null return runBlocking { - when (val result = settingCovers.immutable(requireNotNull(context)).obtain(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 8df5b8c2f..2fa73ba70 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 @@ -31,18 +31,18 @@ import org.oxycblt.musikr.cover.FileCover import org.oxycblt.musikr.cover.MutableCovers interface SettingCovers { - suspend fun immutable(context: Context): Covers - suspend fun mutate(context: Context, revision: UUID): MutableCovers + + companion object { + fun immutable(context: Context): Covers = + CompatCovers(context, BaseSiloedCovers(context)) + } } 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) @@ -54,4 +54,5 @@ constructor(private val imageSettings: ImageSettings, private val identifier: Co private suspend fun siloedCovers(context: Context, revision: UUID, with: CoverParams) = MutableCompatCovers( context, MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier)) + } diff --git a/musikr/src/main/java/org/oxycblt/musikr/Config.kt b/musikr/src/main/java/org/oxycblt/musikr/Config.kt index 0623076a5..d00b3b052 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/Config.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/Config.kt @@ -19,6 +19,7 @@ package org.oxycblt.musikr import org.oxycblt.musikr.cache.Cache +import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.cover.MutableCovers import org.oxycblt.musikr.playlist.db.StoredPlaylists import org.oxycblt.musikr.tag.interpret.Naming @@ -37,7 +38,7 @@ data class Storage( * with the cache for best performance. This will be used during music loading and when * retrieving cover information from the library. */ - val storedCovers: MutableCovers, + val storedCovers: MutableCovers, /** * A repository of user-created playlists that should also be loaded into the library. This will diff --git a/musikr/src/main/java/org/oxycblt/musikr/cache/Cache.kt b/musikr/src/main/java/org/oxycblt/musikr/cache/Cache.kt index 277495d3a..8d8647700 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/cache/Cache.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/cache/Cache.kt @@ -18,12 +18,14 @@ package org.oxycblt.musikr.cache +import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.cover.Covers +import org.oxycblt.musikr.cover.FileCover import org.oxycblt.musikr.fs.DeviceFile import org.oxycblt.musikr.pipeline.RawSong abstract class Cache { - internal abstract suspend fun read(file: DeviceFile, covers: Covers): CacheResult + internal abstract suspend fun read(file: DeviceFile, covers: Covers): CacheResult internal abstract suspend fun write(song: RawSong) diff --git a/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt b/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt index 2e70f2721..c332946a7 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt @@ -31,6 +31,7 @@ import androidx.room.RoomDatabase import androidx.room.Transaction import androidx.room.TypeConverter import androidx.room.TypeConverters +import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.cover.CoverResult import org.oxycblt.musikr.cover.Covers import org.oxycblt.musikr.fs.DeviceFile @@ -118,13 +119,13 @@ internal data class CachedSong( val replayGainAlbumAdjustment: Float?, val coverId: String?, ) { - suspend fun intoRawSong(file: DeviceFile, covers: Covers): RawSong? { + suspend fun intoRawSong(file: DeviceFile, covers: Covers): RawSong? { val cover = when (val result = coverId?.let { covers.obtain(it) }) { // We found the cover. - is CoverResult.Hit -> result.cover + is CoverResult.Hit -> result.cover // We actually didn't find the cover, can't safely convert. - is CoverResult.Miss -> return null + is CoverResult.Miss -> return null // No cover in the first place, can ignore. null -> null } diff --git a/musikr/src/main/java/org/oxycblt/musikr/cache/StoredCache.kt b/musikr/src/main/java/org/oxycblt/musikr/cache/StoredCache.kt index 4707ffe3f..848d50063 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/cache/StoredCache.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/cache/StoredCache.kt @@ -19,7 +19,9 @@ package org.oxycblt.musikr.cache import android.content.Context +import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.cover.Covers +import org.oxycblt.musikr.cover.FileCover import org.oxycblt.musikr.fs.DeviceFile import org.oxycblt.musikr.pipeline.RawSong @@ -53,7 +55,7 @@ private abstract class BaseStoredCache(protected val writeDao: CacheWriteDao) : private class VisibleStoredCache(private val visibleDao: VisibleCacheDao, writeDao: CacheWriteDao) : BaseStoredCache(writeDao) { - override suspend fun read(file: DeviceFile, covers: Covers): CacheResult { + override suspend fun read(file: DeviceFile, covers: Covers): CacheResult { val song = visibleDao.selectSong(file.uri.toString()) ?: return CacheResult.Miss(file, null) if (song.modifiedMs != file.modifiedMs) { // We *found* this file earlier, but it's out of date. @@ -77,7 +79,7 @@ private class InvisibleStoredCache( private val invisibleCacheDao: InvisibleCacheDao, writeDao: CacheWriteDao ) : BaseStoredCache(writeDao) { - override suspend fun read(file: DeviceFile, covers: Covers) = + override suspend fun read(file: DeviceFile, covers: Covers) = CacheResult.Miss(file, invisibleCacheDao.selectAddedMs(file.uri.toString())) class Factory(private val cacheDatabase: CacheDatabase) : Cache.Factory() { diff --git a/musikr/src/main/java/org/oxycblt/musikr/cover/FileCovers.kt b/musikr/src/main/java/org/oxycblt/musikr/cover/FileCovers.kt index 6a38f9946..f4d93c3ca 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/cover/FileCovers.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/cover/FileCovers.kt @@ -25,7 +25,7 @@ import org.oxycblt.musikr.fs.app.AppFiles import org.oxycblt.musikr.metadata.Metadata open class FileCovers(private val appFiles: AppFiles, private val coverFormat: CoverFormat) : - Covers { + Covers { override suspend fun obtain(id: String): CoverResult { val file = appFiles.find(getFileName(id)) return if (file != null) { @@ -42,7 +42,7 @@ class MutableFileCovers( private val appFiles: AppFiles, private val coverFormat: CoverFormat, private val coverIdentifier: CoverIdentifier -) : FileCovers(appFiles, coverFormat), MutableCovers { +) : FileCovers(appFiles, coverFormat), MutableCovers { override suspend fun create(file: DeviceFile, metadata: Metadata): CoverResult { val data = metadata.cover ?: return CoverResult.Miss() val id = coverIdentifier.identify(data) diff --git a/musikr/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt b/musikr/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt index f14eb9f0e..d47ed5e9d 100644 --- a/musikr/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt +++ b/musikr/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt @@ -63,7 +63,7 @@ private class ExtractStepImpl( private val metadataExtractor: MetadataExtractor, private val tagParser: TagParser, private val cacheFactory: Cache.Factory, - private val covers: MutableCovers + private val covers: MutableCovers ) : ExtractStep { @OptIn(ExperimentalCoroutinesApi::class) override fun extract(nodes: Flow): Flow { @@ -126,7 +126,7 @@ private class ExtractStepImpl( val cover = when (val result = covers.create(f, extractedMetadata)) { - is CoverResult.Hit -> result.cover + is CoverResult.Hit -> result.cover else -> null } val rawSong =