From c3f9f0d80e39b23b7e7c3ffe72e1916aaeac4d29 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Fri, 29 Nov 2024 09:49:45 -0700 Subject: [PATCH] image: use cover retriever in app --- .../oxycblt/auxio/image/extractor/Components.kt | 12 ++++++------ .../org/oxycblt/auxio/image/extractor/Cover.kt | 2 ++ .../oxycblt/auxio/image/stack/CoverRetriever.kt | 15 ++++++++++----- .../auxio/image/stack/cache/CacheModule.kt | 2 ++ 4 files changed, 20 insertions(+), 11 deletions(-) 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 a095171d8..b5c1bb588 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 @@ -43,7 +43,7 @@ import kotlinx.coroutines.withContext import okio.FileSystem import okio.buffer import okio.source -import org.oxycblt.auxio.image.stack.extractor.CoverExtractor +import org.oxycblt.auxio.image.stack.CoverRetriever class CoverKeyer @Inject constructor() : Keyer { override fun key(data: Cover, options: Options) = "${data.key}&${options.size}" @@ -54,16 +54,16 @@ private constructor( private val context: Context, private val cover: Cover, private val size: Size, - private val coverExtractor: CoverExtractor, + private val coverRetriever: CoverRetriever, ) : Fetcher { override suspend fun fetch(): FetchResult? { val streams = when (val cover = cover) { - is Cover.Single -> listOfNotNull(coverExtractor.extract(cover)) + is Cover.Single -> listOfNotNull(coverRetriever.retrieve(cover)) is Cover.Multi -> buildList { for (single in cover.all) { - coverExtractor.extract(single)?.let { add(it) } + coverRetriever.retrieve(single)?.let { add(it) } if (size == 4) { break } @@ -147,9 +147,9 @@ private constructor( return if (size.mod(2) > 0) size + 1 else size } - class Factory @Inject constructor(private val coverExtractor: CoverExtractor) : + class Factory @Inject constructor(private val coverRetriever: CoverRetriever) : Fetcher.Factory { override fun create(data: Cover, options: Options, imageLoader: ImageLoader) = - CoverFetcher(options.context, data, options.size, coverExtractor) + CoverFetcher(options.context, data, options.size, coverRetriever) } } 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 14bfca6df..839e1b49f 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 @@ -26,7 +26,9 @@ sealed interface Cover { class Single(song: Song) : Cover { override val key = "${song.uid}@${song.lastModified}" + val uid = song.uid val uri = song.uri + val lastModified = song.lastModified } class Multi(val all: List) : Cover { diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt index 14e0f512d..89de05d67 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/CoverRetriever.kt @@ -20,17 +20,22 @@ package org.oxycblt.auxio.image.stack import java.io.InputStream import javax.inject.Inject +import org.oxycblt.auxio.image.extractor.Cover import org.oxycblt.auxio.image.stack.cache.CoverCache -import org.oxycblt.auxio.music.Song +import org.oxycblt.auxio.image.stack.extractor.CoverExtractor interface CoverRetriever { - suspend fun retrieve(song: Song): InputStream? + suspend fun retrieve(cover: Cover.Single): InputStream? } class CoverRetrieverImpl @Inject -constructor(private val coverCache: CoverCache, private val coverRetriever: CoverRetriever) : +constructor(private val coverCache: CoverCache, private val coverExtractor: CoverExtractor) : CoverRetriever { - override suspend fun retrieve(song: Song) = - coverCache.read(song) ?: coverRetriever.retrieve(song)?.also { coverCache.write(song, it) } + override suspend fun retrieve(cover: Cover.Single) = + coverCache.read(cover) + ?: coverExtractor.extract(cover)?.also { + coverCache.write(cover, it) + it.reset() + } } diff --git a/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CacheModule.kt b/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CacheModule.kt index ae54a32f8..e813395e1 100644 --- a/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CacheModule.kt +++ b/app/src/main/java/org/oxycblt/auxio/image/stack/cache/CacheModule.kt @@ -41,6 +41,8 @@ interface StackModule { @Module @InstallIn(SingletonComponent::class) class StoredCoversDatabaseModule { + @Provides fun storedCoversDao(database: StoredCoversDatabase) = database.storedCoversDao() + @Singleton @Provides fun database(@ApplicationContext context: Context) =