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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user