perf: parallelize artist resolution and use small images for cards

Resolve albums, tracks, and artists concurrently with tokio::try_join
instead of sequentially. Artists were waiting behind album/track
resolution unnecessarily. Also change get_image() to prefer small
(230px) over large (600px) for card contexts, reducing download size.
This commit is contained in:
vicrodh committed 2026-03-08 12:41:00 -06:00
1 parent f95620ba12
commit 8a2c12ee41
1 file changed
+16 -18
+16 -18
View File
@@ -582,10 +582,10 @@ fn format_quality(hires: bool, bit_depth: Option<u32>, sampling_rate: Option<f64
fn get_image(image: &ImageSet) -> String {
image
.large
.small
.as_ref()
.or(image.large.as_ref())
.or(image.thumbnail.as_ref())
.or(image.small.as_ref())
.cloned()
.unwrap_or_default()
}
@@ -794,17 +794,25 @@ pub async fn reco_get_home_resolved(
.map(|s| (s.artist_id, s.play_count))
.collect();
// Step 3: Resolve albums (recent + favorite)
let recently_played_albums = resolve_albums(
// Step 3: Resolve albums, tracks, AND artists in parallel
// Artists are independent of albums/tracks, so start them concurrently.
let albums_fut = resolve_albums(
&seeds.recently_played_album_ids,
&reco_state,
&app_state,
&cache_state,
)
.await?;
);
let tracks_fut = resolve_tracks(&all_track_ids, &reco_state, &app_state, &cache_state);
let artists_fut = resolve_artists(
&all_artist_ids,
&artist_play_counts,
&reco_state,
&app_state,
&cache_state,
);
// Step 4: Resolve tracks (continue + favorite)
let all_tracks = resolve_tracks(&all_track_ids, &reco_state, &app_state, &cache_state).await?;
let (recently_played_albums, all_tracks, top_artists) =
tokio::try_join!(albums_fut, tracks_fut, artists_fut)?;
// Build track lookup
let track_map: HashMap<u64, &TrackDisplayMeta> =
@@ -943,16 +951,6 @@ pub async fn reco_get_home_resolved(
all_albums
};
// Step 6: Resolve artists
let top_artists = resolve_artists(
&all_artist_ids,
&artist_play_counts,
&reco_state,
&app_state,
&cache_state,
)
.await?;
Ok(HomeResolved {
recently_played_albums,
continue_listening_tracks,