diff --git a/src/app.rs b/src/app.rs index 7e14bfa9..05a271be 100644 --- a/src/app.rs +++ b/src/app.rs @@ -707,10 +707,26 @@ impl App { } } - pub fn save_tracks(&mut self, track_ids: Vec) { + pub fn toggle_save_track(&mut self, track_id: String) { if let Some(spotify) = &self.spotify { - match spotify.current_user_saved_tracks_add(&track_ids) { - Ok(()) => {} + match spotify.current_user_saved_tracks_contains(&[track_id.clone()]) { + Ok(saved) => { + if saved.first() == Some(&true) { + match spotify.current_user_saved_tracks_delete(&[track_id]) { + Ok(()) => {} + Err(e) => { + self.handle_error(e); + } + } + } else { + match spotify.current_user_saved_tracks_add(&[track_id]) { + Ok(()) => {} + Err(e) => { + self.handle_error(e); + } + } + } + } Err(e) => { self.handle_error(e); } diff --git a/src/handlers/album_tracks.rs b/src/handlers/album_tracks.rs index f2deb099..dcd7edf3 100644 --- a/src/handlers/album_tracks.rs +++ b/src/handlers/album_tracks.rs @@ -62,7 +62,7 @@ pub fn handler(key: Key, app: &mut App) { .get(app.saved_album_tracks_index) { if let Some(track_id) = &selected_track.id { - app.save_tracks(vec![track_id.clone()]); + app.toggle_save_track(track_id.clone()); }; }; } diff --git a/src/handlers/playbar.rs b/src/handlers/playbar.rs index ed38b113..f3347e14 100644 --- a/src/handlers/playbar.rs +++ b/src/handlers/playbar.rs @@ -11,7 +11,7 @@ pub fn handler(key: Key, app: &mut App) { if let Some(playing_context) = &app.current_playback_context { if let Some(track) = &playing_context.item { if let Some(id) = track.id.to_owned() { - app.save_tracks(vec![id]); + app.toggle_save_track(id); } } } diff --git a/src/handlers/recently_played.rs b/src/handlers/recently_played.rs index 7bdb8268..de0bce53 100644 --- a/src/handlers/recently_played.rs +++ b/src/handlers/recently_played.rs @@ -29,7 +29,7 @@ pub fn handler(key: Key, app: &mut App) { recently_played_result.items.get(app.recently_played.index) { if let Some(track_id) = &selected_track.track.id { - app.save_tracks(vec![track_id.clone()]); + app.toggle_save_track(track_id.clone()); }; }; };