From 3de5fecf4adaaf47a8695e4c8f58fe23cd6ebaba Mon Sep 17 00:00:00 2001 From: OxygenCobalt Date: Sun, 23 Jan 2022 11:30:26 -0700 Subject: [PATCH] coil: gracefully handle file handling failures Wrap the basic fetchArt call in a try statement to prevent exceptions from being unable to open a file from propagating outwards. This allows us to safely degrade when creating mosaics. --- .../java/org/oxycblt/auxio/coil/AuxioFetcher.kt | 14 +++++++++----- .../main/java/org/oxycblt/auxio/coil/Fetchers.kt | 4 ++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/oxycblt/auxio/coil/AuxioFetcher.kt b/app/src/main/java/org/oxycblt/auxio/coil/AuxioFetcher.kt index 344d5d634..6c52f9b87 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/AuxioFetcher.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/AuxioFetcher.kt @@ -50,10 +50,14 @@ abstract class AuxioFetcher : Fetcher { return null } - return if (settingsManager.useQualityCovers) { - fetchQualityCovers(context, album) - } else { - fetchMediaStoreCovers(context, album) + return try { + if (settingsManager.useQualityCovers) { + fetchQualityCovers(context, album) + } else { + fetchMediaStoreCovers(context, album) + } + } catch (e: Exception) { + null } } @@ -205,7 +209,7 @@ abstract class AuxioFetcher : Fetcher { */ protected fun createMosaic(context: Context, streams: List, size: Size): FetchResult? { if (streams.size < 4) { - return streams.getOrNull(0)?.let { stream -> + return streams.firstOrNull()?.let { stream -> return SourceResult( source = ImageSource(stream.source().buffer(), context), mimeType = null, diff --git a/app/src/main/java/org/oxycblt/auxio/coil/Fetchers.kt b/app/src/main/java/org/oxycblt/auxio/coil/Fetchers.kt index 418083170..182106efd 100644 --- a/app/src/main/java/org/oxycblt/auxio/coil/Fetchers.kt +++ b/app/src/main/java/org/oxycblt/auxio/coil/Fetchers.kt @@ -34,6 +34,7 @@ import org.oxycblt.auxio.music.Artist import org.oxycblt.auxio.music.Genre import org.oxycblt.auxio.music.Song import org.oxycblt.auxio.ui.Sort +import org.oxycblt.auxio.util.logD import kotlin.math.min /** @@ -81,9 +82,12 @@ class ArtistImageFetcher private constructor( .sortAlbums(artist.albums) val results = albums.mapAtMost(4) { album -> + logD("${artist.name} ${album.name}") fetchArt(context, album) } + logD("OK: ${artist.name}") + return createMosaic(context, results, size) }