From 4defded54646958268a20787917e4721ae96407d Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Sat, 12 Oct 2019 19:28:18 +0200 Subject: [PATCH] fix slicing of playlists when saving large lists playlist updates need to be submitted in batches of max 100 previously, it would submit the entire rest after submitting the first 100 via user_playlist_replace_tracks, which was rejected by the server. fixes #99 --- src/spotify.rs | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/spotify.rs b/src/spotify.rs index 244f3cf..8d88e6e 100644 --- a/src/spotify.rs +++ b/src/spotify.rs @@ -430,30 +430,32 @@ impl Spotify { None }; - match self.api_with_retry(|api| api.user_playlist_replace_tracks(&self.user, id, &tracks)) { - Some(()) => { - debug!("saved {} tracks to playlist {}", tracks.len(), id); + if let Some(()) = self.api_with_retry(|api| api.user_playlist_replace_tracks(&self.user, id, &tracks)) { + debug!("saved {} tracks to playlist {}", tracks.len(), id); + while let Some(ref mut tracks) = remainder.clone() { + // grab the next set of 100 tracks + remainder = if tracks.len() > 100 { + Some(tracks.split_off(100)) + } else { + None + }; - // send the remaining tracks in batches of max 100 - while let Some(ref mut tracks) = remainder.clone() { - let result = self.api_with_retry(|api| { - api.user_playlist_add_tracks(&self.user, id, &tracks, None) - }); - if result.is_some() { - // grab the next set of tracks - remainder = if tracks.len() > 100 { - Some(tracks.split_off(100)) - } else { - None - }; - } else { - error!("error saving tracks to playlists {}", id); - } + debug!("adding another {} tracks to playlist", tracks.len()); + let result = self.api_with_retry(|api| { + api.user_playlist_add_tracks(&self.user, id, &tracks, None) + }); + + + if result.is_some() { + debug!("{} tracks successfully added", tracks.len()); + } else { + error!("error saving tracks to playlists {}", id); + return; } } - None => { - error!("error saving tracks to playlist {}", id); - } + } + else { + error!("error saving tracks to playlist {}", id); } }