From 514e88537f0882c8de6704b46d29854c24a718b8 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Sun, 28 Nov 2021 23:13:08 +0100 Subject: [PATCH] Fix available tracks returned as unavailable --- src/downloader.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/downloader.rs b/src/downloader.rs index 4aa25ba..efae5f2 100644 --- a/src/downloader.rs +++ b/src/downloader.rs @@ -472,6 +472,16 @@ impl DownloaderInternal { Ok(()) } + async fn find_alternative(session: &Session, track : Track) -> Result { + for alt in track.alternatives { + let t = Track::get(&session, alt).await?; + if t.available { + return Ok(t); + } + } + return Err(SpotifyError::Unavailable); + } + /// Download track by id async fn download_track( session: &Session, @@ -482,16 +492,11 @@ impl DownloaderInternal { job_id: i64, ) -> Result<(PathBuf, AudioFormat), SpotifyError> { let id = SpotifyId::from_base62(id)?; - let track = Track::get(session, id).await?; + let mut track = Track::get(session, id).await?; + // Fallback if unavailable if !track.available { - for alt in track.alternatives { - let t = Track::get(session, alt).await?; - if t.available { - break; - } - } - return Err(SpotifyError::Unavailable); + track = DownloaderInternal::find_alternative(session, track).await?; } // Quality fallback let mut quality = config.quality;