Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions src/infra/network/recommend.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use super::Network;
use crate::core::app::{ActiveBlock, RouteId, TrackTableContext};
use anyhow::anyhow;
use futures::future;
use rspotify::model::{
enums::Country,
idtypes::{ArtistId, TrackId},
Expand Down Expand Up @@ -48,7 +49,6 @@ impl RecommendationNetwork for Network {
.await
{
Ok(recommendations) => {
let mut app = self.app.lock().await;
// Convert SimplifiedTrack to FullTrack (best effort)
// SimplifiedTrack doesn't have album field which FullTrack needs.
// This is tricky. Recommendations usually return SimplifiedTracks.
Expand All @@ -63,15 +63,12 @@ impl RecommendationNetwork for Network {
.filter_map(|t| t.id.clone())
.collect();

let mut full_tracks = Vec::new();
if !track_ids.is_empty() {
for id in &track_ids {
if let Ok(track) = self.spotify.track(id.clone(), None).await {
full_tracks.push(track);
}
}
}
let fetch_futures = track_ids.into_iter().map(|id| self.spotify.track(id, None));

let results = future::join_all(fetch_futures).await;
let full_tracks: Vec<_> = results.into_iter().filter_map(|res| res.ok()).collect();

let mut app = self.app.lock().await;
app.track_table.tracks = full_tracks;

// Prepend the seed track if available so user knows context
Expand Down
Loading