diff --git a/Cargo.lock b/Cargo.lock index e6ebd97..08f4d0c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,7 +90,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "itunesdb" -version = "0.1.61" +version = "0.1.63" dependencies = [ "bincode", "env_logger", diff --git a/Cargo.toml b/Cargo.toml index 9b9fde4..0555bcf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itunesdb" -version = "0.1.62" +version = "0.1.63" edition = "2021" authors = ["alterwain"] diff --git a/src/xobjects.rs b/src/xobjects.rs index f56595f..7a0d67d 100644 --- a/src/xobjects.rs +++ b/src/xobjects.rs @@ -272,6 +272,23 @@ impl XDatabase { tracks.push(track); } } + + pub fn remove_track_from_playlist(&mut self, track_id: u32, pl_id: u64) { + self.remove_track_from_playlist_(track_id, pl_id, 2); + self.remove_track_from_playlist_(track_id, pl_id, 3); + } + + fn remove_track_from_playlist_(&mut self, track_id: u32, pl_id: u64, n: u32) { + if let XSomeList::Playlists(playlists ) = &mut self.find_dataset(n).child { + let playlist = playlists.iter_mut().find(|t| t.data.is_master_playlist_flag != 0); + if playlist.is_none() { return; } + let playlist = playlist.unwrap(); + let mut s = playlist.elems.len(); + playlist.elems.retain_mut(|t| t.0.track_id == track_id); + s -= playlist.elems.len(); + playlist.data.playlist_item_count -= (s as u32); + } + } fn add_track_to_playlists(&mut self, n: u32, track: &XTrackItem) { if let XSomeList::Playlists(playlists) = &mut self.find_dataset(n).child {