diff --git a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt index 1536402a3..8d569292d 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/CoverView.kt @@ -374,7 +374,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr fun bind(songs: List, desc: String, @DrawableRes errorRes: Int) = bindImpl(Cover.multi(songs), desc, errorRes) - private fun bindImpl(cover: Cover, desc: String, @DrawableRes errorRes: Int) { + private fun bindImpl(cover: Cover?, desc: String, @DrawableRes errorRes: Int) { val request = ImageRequest.Builder(context) .data(cover) diff --git a/app/src/main/java/org/oxycblt/musikr/Music.kt b/app/src/main/java/org/oxycblt/musikr/Music.kt index 5dcbb82a7..6cc2405f5 100644 --- a/app/src/main/java/org/oxycblt/musikr/Music.kt +++ b/app/src/main/java/org/oxycblt/musikr/Music.kt @@ -265,7 +265,7 @@ interface Song : Music { /** The date the audio file was added to the device, as a unix epoch timestamp. */ val dateAdded: Long /** Useful information to quickly obtain the album cover. */ - val cover: Cover.Single + val cover: Cover.Single? /** * The parent [Album]. If the metadata did not specify an album, it's parent directory is used * instead. diff --git a/app/src/main/java/org/oxycblt/musikr/cache/Cache.kt b/app/src/main/java/org/oxycblt/musikr/cache/Cache.kt index d02557e15..25b5fb4a2 100644 --- a/app/src/main/java/org/oxycblt/musikr/cache/Cache.kt +++ b/app/src/main/java/org/oxycblt/musikr/cache/Cache.kt @@ -34,7 +34,7 @@ interface Cache { } } -data class CachedSong(val parsedTags: ParsedTags, val cover: Cover?) +data class CachedSong(val parsedTags: ParsedTags, val cover: Cover.Single?) private class FullCache(private val cacheInfoDao: CacheInfoDao) : Cache { override suspend fun read(file: DeviceFile) = diff --git a/app/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt b/app/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt index 9133ce8f9..95481873e 100644 --- a/app/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt +++ b/app/src/main/java/org/oxycblt/musikr/cache/CacheDatabase.kt @@ -88,7 +88,7 @@ internal data class CachedInfo( val albumArtistNames: List, val albumArtistSortNames: List, val genreNames: List, - val cover: Cover? = null + val cover: Cover.Single? = null ) { fun intoCachedSong() = CachedSong( @@ -128,7 +128,7 @@ internal data class CachedInfo( @TypeConverter fun toDate(string: String?) = string?.let(Date::from) - @TypeConverter fun fromCover(cover: Cover?) = cover?.key + @TypeConverter fun fromCover(cover: Cover.Single?) = cover?.key @TypeConverter fun toCover(key: String?) = key?.let { Cover.Single(it) } } diff --git a/app/src/main/java/org/oxycblt/musikr/cover/Cover.kt b/app/src/main/java/org/oxycblt/musikr/cover/Cover.kt index 068bed6e6..1e1c32b1e 100644 --- a/app/src/main/java/org/oxycblt/musikr/cover/Cover.kt +++ b/app/src/main/java/org/oxycblt/musikr/cover/Cover.kt @@ -41,7 +41,7 @@ sealed interface Cover { private fun order(songs: Collection) = FALLBACK_SORT.songs(songs) - .map { it.cover } + .mapNotNull { it.cover } .groupBy { it.key } .entries .sortedByDescending { it.value.size } diff --git a/app/src/main/java/org/oxycblt/musikr/model/SongImpl.kt b/app/src/main/java/org/oxycblt/musikr/model/SongImpl.kt index 55b2e0773..206a7fd3f 100644 --- a/app/src/main/java/org/oxycblt/musikr/model/SongImpl.kt +++ b/app/src/main/java/org/oxycblt/musikr/model/SongImpl.kt @@ -22,7 +22,6 @@ import org.oxycblt.musikr.Album import org.oxycblt.musikr.Artist import org.oxycblt.musikr.Genre import org.oxycblt.musikr.Song -import org.oxycblt.musikr.cover.Cover import org.oxycblt.musikr.tag.interpret.PreSong interface SongCore { @@ -56,7 +55,7 @@ class SongImpl(private val handle: SongCore) : Song { override val replayGainAdjustment = preSong.replayGainAdjustment override val lastModified = preSong.lastModified override val dateAdded = preSong.dateAdded - override val cover = Cover.single("") + override val cover = preSong.cover override val album: Album get() = handle.resolveAlbum() diff --git a/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt b/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt index 4e8245643..8334df78d 100644 --- a/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt +++ b/app/src/main/java/org/oxycblt/musikr/pipeline/ExtractStep.kt @@ -96,5 +96,6 @@ constructor( } sealed interface ExtractedMusic { - data class Song(val file: DeviceFile, val tags: ParsedTags, val cover: Cover?) : ExtractedMusic + data class Song(val file: DeviceFile, val tags: ParsedTags, val cover: Cover.Single?) : + ExtractedMusic } diff --git a/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt b/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt index ec2a40e43..0bc523afe 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/interpret/PreMusic.kt @@ -48,7 +48,7 @@ data class PreSong( val replayGainAdjustment: ReplayGainAdjustment, val lastModified: Long, val dateAdded: Long, - val cover: Cover?, + val cover: Cover.Single?, val preAlbum: PreAlbum, val preArtists: List, val preGenres: List diff --git a/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt b/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt index 85b03f037..83a84ff30 100644 --- a/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt +++ b/app/src/main/java/org/oxycblt/musikr/tag/interpret/TagInterpreter.kt @@ -36,7 +36,7 @@ interface TagInterpreter { fun interpret( file: DeviceFile, parsedTags: ParsedTags, - cover: Cover?, + cover: Cover.Single?, interpretation: Interpretation ): PreSong } @@ -45,7 +45,7 @@ class TagInterpreterImpl @Inject constructor() : TagInterpreter { override fun interpret( file: DeviceFile, parsedTags: ParsedTags, - cover: Cover?, + cover: Cover.Single?, interpretation: Interpretation ): PreSong { val individualPreArtists =