From d8d68d5d8db7f7e7c6d08a688bd3bca49998c9f6 Mon Sep 17 00:00:00 2001 From: austinried <4966622+austinried@users.noreply.github.com> Date: Wed, 23 Sep 2026 16:42:41 +0000 Subject: [PATCH] show the artist hero thumbnail under the full image too --- .../ui/library/ArtistDetailScreen.kt | 4 ++++ .../ui/library/ArtistDetailViewModel.kt | 22 ++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt b/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt index 42ada660..9153b01c 100644 --- a/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt +++ b/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailScreen.kt @@ -71,10 +71,12 @@ fun ArtistDetailRoute( val artist by viewModel.artist.collectAsStateWithLifecycle(initialValue = null) val albums by viewModel.albums.collectAsStateWithLifecycle(initialValue = emptyList()) val art by viewModel.art.collectAsStateWithLifecycle() + val artThumbnail by viewModel.artThumbnail.collectAsStateWithLifecycle() ArtistDetailScreen( artist = artist, albums = albums, art = art, + artThumbnail = artThumbnail, coverArt = viewModel::coverArt, onBack = onBack, onAlbumClick = onAlbumClick, @@ -87,6 +89,7 @@ fun ArtistDetailScreen( artist: Artist?, albums: List, art: CoverArtRef?, + artThumbnail: CoverArtRef? = null, coverArt: (String?, Boolean) -> CoverArtRef?, onBack: () -> Unit, onAlbumClick: (Album) -> Unit, @@ -140,6 +143,7 @@ fun ArtistDetailScreen( CoverArt( ref = art, name = artist?.name.orEmpty(), + thumbnailRef = artThumbnail, modifier = Modifier.fillMaxWidth().height(ART_HEIGHT), ) Text( diff --git a/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailViewModel.kt b/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailViewModel.kt index f7b3a607..07e088cf 100644 --- a/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailViewModel.kt +++ b/app/src/main/kotlin/com/subtracks/ui/library/ArtistDetailViewModel.kt @@ -33,22 +33,34 @@ class ArtistDetailViewModel( private val _art = MutableStateFlow(null) val art: StateFlow = _art + private val _artThumbnail = MutableStateFlow(null) + val artThumbnail: StateFlow = _artThumbnail + init { viewModelScope.launch { artist .filterNotNull() .distinctUntilChangedBy { it.id } - .collectLatest { loaded -> _art.value = resolveArt(loaded) } + .collectLatest { loaded -> + val (full, thumbnail) = resolveArt(loaded) + _art.value = full + _artThumbnail.value = thumbnail + } } } - private suspend fun resolveArt(artist: Artist): CoverArtRef? { + private suspend fun resolveArt(artist: Artist): Pair { repeat(3) { attempt -> - val ref = sourceRepository.artistArt(artist.id) ?: sourceRepository.coverArt(artist.coverArt) - if (ref != null) return ref + val full = sourceRepository.artistArt(artist.id) ?: sourceRepository.coverArt(artist.coverArt) + if (full != null) { + val thumbnail = + sourceRepository.artistArt(artist.id, thumbnail = true) + ?: sourceRepository.coverArt(artist.coverArt, thumbnail = true) + return full to thumbnail + } if (attempt < 2) delay(300) } - return null + return null to null } fun coverArt(