musikr: fix build issues
This commit is contained in:
parent
ce5f0fa2c9
commit
a78b213537
8 changed files with 25 additions and 19 deletions
|
@ -32,8 +32,7 @@ import org.oxycblt.auxio.BuildConfig
|
||||||
import org.oxycblt.auxio.image.covers.SettingCovers
|
import org.oxycblt.auxio.image.covers.SettingCovers
|
||||||
import org.oxycblt.musikr.cover.CoverResult
|
import org.oxycblt.musikr.cover.CoverResult
|
||||||
|
|
||||||
@AndroidEntryPoint
|
class CoverProvider() :
|
||||||
class CoverProvider @Inject constructor(private val settingCovers: SettingCovers) :
|
|
||||||
ContentProvider() {
|
ContentProvider() {
|
||||||
override fun onCreate(): Boolean = true
|
override fun onCreate(): Boolean = true
|
||||||
|
|
||||||
|
@ -43,7 +42,7 @@ class CoverProvider @Inject constructor(private val settingCovers: SettingCovers
|
||||||
}
|
}
|
||||||
val id = uri.lastPathSegment ?: return null
|
val id = uri.lastPathSegment ?: return null
|
||||||
return runBlocking {
|
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()
|
is CoverResult.Hit -> result.cover.fd()
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,18 +31,18 @@ import org.oxycblt.musikr.cover.FileCover
|
||||||
import org.oxycblt.musikr.cover.MutableCovers
|
import org.oxycblt.musikr.cover.MutableCovers
|
||||||
|
|
||||||
interface SettingCovers {
|
interface SettingCovers {
|
||||||
suspend fun immutable(context: Context): Covers<out FileCover>
|
|
||||||
|
|
||||||
suspend fun mutate(context: Context, revision: UUID): MutableCovers<out Cover>
|
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
|
class SettingCoversImpl
|
||||||
@Inject
|
@Inject
|
||||||
constructor(private val imageSettings: ImageSettings, private val identifier: CoverIdentifier) :
|
constructor(private val imageSettings: ImageSettings, private val identifier: CoverIdentifier) :
|
||||||
SettingCovers {
|
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> =
|
override suspend fun mutate(context: Context, revision: UUID): MutableCovers<out Cover> =
|
||||||
when (imageSettings.coverMode) {
|
when (imageSettings.coverMode) {
|
||||||
CoverMode.OFF -> NullCovers(context)
|
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) =
|
private suspend fun siloedCovers(context: Context, revision: UUID, with: CoverParams) =
|
||||||
MutableCompatCovers(
|
MutableCompatCovers(
|
||||||
context, MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier))
|
context, MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
package org.oxycblt.musikr
|
package org.oxycblt.musikr
|
||||||
|
|
||||||
import org.oxycblt.musikr.cache.Cache
|
import org.oxycblt.musikr.cache.Cache
|
||||||
|
import org.oxycblt.musikr.cover.Cover
|
||||||
import org.oxycblt.musikr.cover.MutableCovers
|
import org.oxycblt.musikr.cover.MutableCovers
|
||||||
import org.oxycblt.musikr.playlist.db.StoredPlaylists
|
import org.oxycblt.musikr.playlist.db.StoredPlaylists
|
||||||
import org.oxycblt.musikr.tag.interpret.Naming
|
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
|
* with the cache for best performance. This will be used during music loading and when
|
||||||
* retrieving cover information from the library.
|
* 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
|
* A repository of user-created playlists that should also be loaded into the library. This will
|
||||||
|
|
|
@ -18,12 +18,14 @@
|
||||||
|
|
||||||
package org.oxycblt.musikr.cache
|
package org.oxycblt.musikr.cache
|
||||||
|
|
||||||
|
import org.oxycblt.musikr.cover.Cover
|
||||||
import org.oxycblt.musikr.cover.Covers
|
import org.oxycblt.musikr.cover.Covers
|
||||||
|
import org.oxycblt.musikr.cover.FileCover
|
||||||
import org.oxycblt.musikr.fs.DeviceFile
|
import org.oxycblt.musikr.fs.DeviceFile
|
||||||
import org.oxycblt.musikr.pipeline.RawSong
|
import org.oxycblt.musikr.pipeline.RawSong
|
||||||
|
|
||||||
abstract class Cache {
|
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)
|
internal abstract suspend fun write(song: RawSong)
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ import androidx.room.RoomDatabase
|
||||||
import androidx.room.Transaction
|
import androidx.room.Transaction
|
||||||
import androidx.room.TypeConverter
|
import androidx.room.TypeConverter
|
||||||
import androidx.room.TypeConverters
|
import androidx.room.TypeConverters
|
||||||
|
import org.oxycblt.musikr.cover.Cover
|
||||||
import org.oxycblt.musikr.cover.CoverResult
|
import org.oxycblt.musikr.cover.CoverResult
|
||||||
import org.oxycblt.musikr.cover.Covers
|
import org.oxycblt.musikr.cover.Covers
|
||||||
import org.oxycblt.musikr.fs.DeviceFile
|
import org.oxycblt.musikr.fs.DeviceFile
|
||||||
|
@ -118,13 +119,13 @@ internal data class CachedSong(
|
||||||
val replayGainAlbumAdjustment: Float?,
|
val replayGainAlbumAdjustment: Float?,
|
||||||
val coverId: String?,
|
val coverId: String?,
|
||||||
) {
|
) {
|
||||||
suspend fun intoRawSong(file: DeviceFile, covers: Covers): RawSong? {
|
suspend fun intoRawSong(file: DeviceFile, covers: Covers<out Cover>): RawSong? {
|
||||||
val cover =
|
val cover =
|
||||||
when (val result = coverId?.let { covers.obtain(it) }) {
|
when (val result = coverId?.let { covers.obtain(it) }) {
|
||||||
// We found the cover.
|
// 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.
|
// 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.
|
// No cover in the first place, can ignore.
|
||||||
null -> null
|
null -> null
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,9 @@
|
||||||
package org.oxycblt.musikr.cache
|
package org.oxycblt.musikr.cache
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import org.oxycblt.musikr.cover.Cover
|
||||||
import org.oxycblt.musikr.cover.Covers
|
import org.oxycblt.musikr.cover.Covers
|
||||||
|
import org.oxycblt.musikr.cover.FileCover
|
||||||
import org.oxycblt.musikr.fs.DeviceFile
|
import org.oxycblt.musikr.fs.DeviceFile
|
||||||
import org.oxycblt.musikr.pipeline.RawSong
|
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) :
|
private class VisibleStoredCache(private val visibleDao: VisibleCacheDao, writeDao: CacheWriteDao) :
|
||||||
BaseStoredCache(writeDao) {
|
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)
|
val song = visibleDao.selectSong(file.uri.toString()) ?: return CacheResult.Miss(file, null)
|
||||||
if (song.modifiedMs != file.modifiedMs) {
|
if (song.modifiedMs != file.modifiedMs) {
|
||||||
// We *found* this file earlier, but it's out of date.
|
// We *found* this file earlier, but it's out of date.
|
||||||
|
@ -77,7 +79,7 @@ private class InvisibleStoredCache(
|
||||||
private val invisibleCacheDao: InvisibleCacheDao,
|
private val invisibleCacheDao: InvisibleCacheDao,
|
||||||
writeDao: CacheWriteDao
|
writeDao: CacheWriteDao
|
||||||
) : BaseStoredCache(writeDao) {
|
) : 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()))
|
CacheResult.Miss(file, invisibleCacheDao.selectAddedMs(file.uri.toString()))
|
||||||
|
|
||||||
class Factory(private val cacheDatabase: CacheDatabase) : Cache.Factory() {
|
class Factory(private val cacheDatabase: CacheDatabase) : Cache.Factory() {
|
||||||
|
|
|
@ -25,7 +25,7 @@ import org.oxycblt.musikr.fs.app.AppFiles
|
||||||
import org.oxycblt.musikr.metadata.Metadata
|
import org.oxycblt.musikr.metadata.Metadata
|
||||||
|
|
||||||
open class FileCovers(private val appFiles: AppFiles, private val coverFormat: CoverFormat) :
|
open class FileCovers(private val appFiles: AppFiles, private val coverFormat: CoverFormat) :
|
||||||
Covers {
|
Covers<FileCover> {
|
||||||
override suspend fun obtain(id: String): CoverResult<FileCover> {
|
override suspend fun obtain(id: String): CoverResult<FileCover> {
|
||||||
val file = appFiles.find(getFileName(id))
|
val file = appFiles.find(getFileName(id))
|
||||||
return if (file != null) {
|
return if (file != null) {
|
||||||
|
@ -42,7 +42,7 @@ class MutableFileCovers(
|
||||||
private val appFiles: AppFiles,
|
private val appFiles: AppFiles,
|
||||||
private val coverFormat: CoverFormat,
|
private val coverFormat: CoverFormat,
|
||||||
private val coverIdentifier: CoverIdentifier
|
private val coverIdentifier: CoverIdentifier
|
||||||
) : FileCovers(appFiles, coverFormat), MutableCovers {
|
) : FileCovers(appFiles, coverFormat), MutableCovers<FileCover> {
|
||||||
override suspend fun create(file: DeviceFile, metadata: Metadata): CoverResult<FileCover> {
|
override suspend fun create(file: DeviceFile, metadata: Metadata): CoverResult<FileCover> {
|
||||||
val data = metadata.cover ?: return CoverResult.Miss()
|
val data = metadata.cover ?: return CoverResult.Miss()
|
||||||
val id = coverIdentifier.identify(data)
|
val id = coverIdentifier.identify(data)
|
||||||
|
|
|
@ -63,7 +63,7 @@ private class ExtractStepImpl(
|
||||||
private val metadataExtractor: MetadataExtractor,
|
private val metadataExtractor: MetadataExtractor,
|
||||||
private val tagParser: TagParser,
|
private val tagParser: TagParser,
|
||||||
private val cacheFactory: Cache.Factory,
|
private val cacheFactory: Cache.Factory,
|
||||||
private val covers: MutableCovers
|
private val covers: MutableCovers<out Cover>
|
||||||
) : ExtractStep {
|
) : ExtractStep {
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
override fun extract(nodes: Flow<ExploreNode>): Flow<ExtractedMusic> {
|
override fun extract(nodes: Flow<ExploreNode>): Flow<ExtractedMusic> {
|
||||||
|
@ -126,7 +126,7 @@ private class ExtractStepImpl(
|
||||||
val cover =
|
val cover =
|
||||||
when (val result =
|
when (val result =
|
||||||
covers.create(f, extractedMetadata)) {
|
covers.create(f, extractedMetadata)) {
|
||||||
is CoverResult.Hit -> result.cover
|
is CoverResult.Hit<Cover> -> result.cover
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
val rawSong =
|
val rawSong =
|
||||||
|
|
Loading…
Reference in a new issue