diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt index 4e3083316..0bf1de4a2 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/Components.kt @@ -27,7 +27,7 @@ import javax.inject.Inject class CoverKeyer @Inject constructor() : Keyer> { override fun key(data: Collection, options: Options) = - "${data.map { it.perceptualHash }.hashCode()}" + "${data.map { it.uniqueness }.hashCode()}" } class CoverFetcher diff --git a/app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt b/app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt index 4595a0dcf..bb0b6197f 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/extractor/Cover.kt @@ -20,6 +20,7 @@ package org.oxycblt.auxio.image.extractor import android.net.Uri import org.oxycblt.auxio.list.sort.Sort +import org.oxycblt.auxio.music.Music import org.oxycblt.auxio.music.Song /** @@ -31,14 +32,20 @@ import org.oxycblt.auxio.music.Song * an album cover. * @author Alexander Capehart (OxygenCobalt) */ -data class Cover(val perceptualHash: String?, val mediaStoreUri: Uri, val songUri: Uri) { +data class Cover(val uniqueness: Uniqueness?, val mediaStoreUri: Uri, val songUri: Uri) { + sealed interface Uniqueness { + data class PerceptualHash(val perceptualHash: String) : Uniqueness + + data class UID(val uid: Music.UID) : Uniqueness + } + companion object { private val FALLBACK_SORT = Sort(Sort.Mode.ByAlbum, Sort.Direction.ASCENDING) fun order(songs: Collection) = FALLBACK_SORT.songs(songs) .map { it.cover } - .groupBy { it.perceptualHash } + .groupBy { it.uniqueness } .entries .sortedByDescending { it.value.size } .map { it.value.first() } diff --git a/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt b/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt index 6604c3579..96ef5fa3c 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/device/DeviceMusicImpl.kt @@ -114,7 +114,11 @@ class SongImpl( get() = _genres override val cover = - Cover(rawSong.coverPerceptualHash, requireNotNull(rawSong.mediaStoreId).toCoverUri(), uri) + Cover( + rawSong.coverPerceptualHash?.let { Cover.Uniqueness.PerceptualHash(it) } + ?: Cover.Uniqueness.UID(uid), + requireNotNull(rawSong.mediaStoreId).toCoverUri(), + uri) /** * The [RawAlbum] instances collated by the [Song]. This can be used to group [Song]s into an