musikr: fix build issues

This commit is contained in:
Alexander Capehart 2025-03-01 21:22:21 -07:00
parent ce5f0fa2c9
commit a78b213537
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
8 changed files with 25 additions and 19 deletions

View file

@ -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
}

View file

@ -31,18 +31,18 @@ import org.oxycblt.musikr.cover.FileCover
import org.oxycblt.musikr.cover.MutableCovers
interface SettingCovers {
suspend fun immutable(context: Context): Covers<out FileCover>
suspend fun mutate(context: Context, revision: UUID): MutableCovers<out Cover>
companion object {
fun immutable(context: Context): Covers<out FileCover> =
CompatCovers(context, BaseSiloedCovers(context))
}
}
class SettingCoversImpl
@Inject
constructor(private val imageSettings: ImageSettings, private val identifier: CoverIdentifier) :
SettingCovers {
override suspend fun immutable(context: Context): Covers<out FileCover> =
CompatCovers(context, BaseSiloedCovers(context))
override suspend fun mutate(context: Context, revision: UUID): MutableCovers<out Cover> =
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))
}

View file

@ -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<out Cover>,
/**
* A repository of user-created playlists that should also be loaded into the library. This will

View file

@ -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<out Cover>): CacheResult
internal abstract suspend fun write(song: RawSong)

View file

@ -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<out Cover>): RawSong? {
val cover =
when (val result = coverId?.let { covers.obtain(it) }) {
// We found the cover.
is CoverResult.Hit -> result.cover
is CoverResult.Hit<out Cover> -> result.cover
// We actually didn't find the cover, can't safely convert.
is CoverResult.Miss -> return null
is CoverResult.Miss<out Cover> -> return null
// No cover in the first place, can ignore.
null -> null
}

View file

@ -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<out Cover>): 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<out Cover>) =
CacheResult.Miss(file, invisibleCacheDao.selectAddedMs(file.uri.toString()))
class Factory(private val cacheDatabase: CacheDatabase) : Cache.Factory() {

View file

@ -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<FileCover> {
override suspend fun obtain(id: String): CoverResult<FileCover> {
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<FileCover> {
override suspend fun create(file: DeviceFile, metadata: Metadata): CoverResult<FileCover> {
val data = metadata.cover ?: return CoverResult.Miss()
val id = coverIdentifier.identify(data)

View file

@ -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<out Cover>
) : ExtractStep {
@OptIn(ExperimentalCoroutinesApi::class)
override fun extract(nodes: Flow<ExploreNode>): Flow<ExtractedMusic> {
@ -126,7 +126,7 @@ private class ExtractStepImpl(
val cover =
when (val result =
covers.create(f, extractedMetadata)) {
is CoverResult.Hit -> result.cover
is CoverResult.Hit<Cover> -> result.cover
else -> null
}
val rawSong =