From 3dbe06c0bcd18f95efd66c269c52030d184cba80 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 29 Nov 2024 10:12:10 -0700 Subject: [PATCH] music: use aosp covers by default Less good, but it's also far more memory efficient. --- .../oxycblt/auxio/image/stack/extractor/AOSPCoverSource.kt | 7 +++++-- .../oxycblt/auxio/image/stack/extractor/ExtractorModule.kt | 2 +- .../auxio/music/stack/interpret/model/DeviceMusicImpl.kt | 6 ++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/AOSPCoverSource.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/AOSPCoverSource.kt index 87fe72171..688476128 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/AOSPCoverSource.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/AOSPCoverSource.kt @@ -18,19 +18,22 @@ package org.oxycblt.auxio.image.stack.extractor +import android.content.Context import android.media.MediaMetadataRetriever import android.net.Uri +import dagger.hilt.android.qualifiers.ApplicationContext import java.io.InputStream import javax.inject.Inject import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -class AOSPCoverSource @Inject constructor() : CoverSource { +class AOSPCoverSource @Inject constructor(@ApplicationContext private val context: Context) : + CoverSource { override suspend fun extract(fileUri: Uri): InputStream? { val mediaMetadataRetriever = MediaMetadataRetriever() val cover = withContext(Dispatchers.IO) { - mediaMetadataRetriever.setDataSource(fileUri.toString()) + mediaMetadataRetriever.setDataSource(context, fileUri) mediaMetadataRetriever.embeddedPicture } ?: return null return cover.inputStream() diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/ExtractorModule.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/ExtractorModule.kt index a74062e9f..326c5df79 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/ExtractorModule.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/extractor/ExtractorModule.kt @@ -35,5 +35,5 @@ interface ExtractorModule { class CoverSourcesModule { @Provides fun coverSources(exoPlayerCoverSource: ExoPlayerCoverSource, aospCoverSource: AOSPCoverSource) = - CoverSources(listOf(exoPlayerCoverSource, aospCoverSource)) + CoverSources(listOf(aospCoverSource, exoPlayerCoverSource)) } diff --git a/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt b/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt index e0af9e218..e004fb035 100644 --- a/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt +++ b/app/src/main/java/org/oxycblt/auxio/music/stack/interpret/model/DeviceMusicImpl.kt @@ -93,7 +93,7 @@ class AlbumImpl(linkedAlbum: LinkedAlbum) : Album { override val releaseType = preAlbum.releaseType override var durationMs = 0L override var dateAdded = 0L - override var cover = Cover.nil() + override var cover: Cover = Cover.nil() override var dates: Date.Range? = null override val artists = linkedAlbum.artists.resolve(this) @@ -123,7 +123,9 @@ class AlbumImpl(linkedAlbum: LinkedAlbum) : Album { } } - fun finalize() {} + fun finalize() { + cover = Cover.single(Sort(Sort.Mode.ByTrack, Sort.Direction.ASCENDING).songs(songs).first()) + } } /**