diff --git a/Cargo.toml b/Cargo.toml index 6954791..92774c6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itunesdb" -version = "0.1.59" +version = "0.1.60" edition = "2021" authors = ["alterwain"] diff --git a/src/xobjects.rs b/src/xobjects.rs index d2f70cb..65ff54e 100644 --- a/src/xobjects.rs +++ b/src/xobjects.rs @@ -188,7 +188,7 @@ impl XDatabase { self.children.iter_mut().find(|d| d.data.data_type == data_type).unwrap() } - pub fn remove_track(&mut self, unique_id: u32) { + pub fn remove_track_completely(&mut self, unique_id: u32) { if let XSomeList::TrackList(tracks) = &mut self.find_dataset(1).child { tracks.retain_mut(|t| t.data.unique_id != unique_id); } @@ -211,6 +211,28 @@ impl XDatabase { } } } + + pub fn remove_track(&mut self, unique_id: u32, playlist_id: u64) { + if let XSomeList::Playlists(playlists) = &mut self.find_dataset(2).child { + for playlist in playlists.iter_mut() { + if playlist.data.persistent_playlist_id != playlist_id { continue } + let mut s = playlist.elems.len(); + playlist.elems.retain_mut(|t| t.0.track_id != unique_id); + s -= playlist.elems.len(); + playlist.data.playlist_item_count -= (s as u32); + } + } + + if let XSomeList::Playlists(playlists) = &mut self.find_dataset(3).child { + for playlist in playlists.iter_mut() { + if playlist.data.persistent_playlist_id != playlist_id { continue } + let mut s = playlist.elems.len(); + playlist.elems.retain_mut(|t| t.0.track_id != unique_id); + s -= playlist.elems.len(); + playlist.data.playlist_item_count -= (s as u32); + } + } + } pub fn get_playlists(&mut self) -> Vec { let mut res_pls = Vec::new();