0.1.67 upd
This commit is contained in:
parent
4d44f8b3e5
commit
9a6dfa7ae6
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "itunesdb"
|
||||
version = "0.1.66"
|
||||
version = "0.1.67"
|
||||
edition = "2021"
|
||||
authors = ["alterwain"]
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
use rand::Rng;
|
||||
|
||||
use crate::objects::{AlbumItem, ChunkHeader, DataSet, Database, JumpTable, LetterJumpEntry, ListSortOrder, Playlist, PlaylistIndexEntry, PlaylistItem, TrackItem};
|
||||
use crate::xobjects::XPlArgument::RawArgument;
|
||||
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
pub struct XDatabase {
|
||||
@ -183,6 +182,37 @@ impl XTrackItem {
|
||||
}
|
||||
}
|
||||
|
||||
fn get_ipods_name(args: Vec<XPlArgument> ) -> String {
|
||||
let mut s = String::from("iPod");
|
||||
for arg in args {
|
||||
if let XPlArgument::String(a) = arg {
|
||||
if a.arg_type == 1 {
|
||||
s = a.val;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
s
|
||||
}
|
||||
|
||||
fn rebuild_quick_sort(playlist: &mut XPlaylist) {
|
||||
//playlist.data.data_object_child_count all 52/53 args + raw args + str args
|
||||
//playlist.data.string_mhod_count only str args count (1)
|
||||
let ipod_name = get_ipods_name(playlist.args.clone());
|
||||
|
||||
let mut args = Vec::new();
|
||||
args.push(XPlArgument::String(XArgument {
|
||||
arg_type: 1,
|
||||
val: ipod_name,
|
||||
}));
|
||||
args.push(XPlArgument::RawArgument(vec![109,104,111,100,24,0,0,0,136,2,0,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,140,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));
|
||||
args.push(XPlArgument::RawArgument(vec![109,104,111,100,24,0,0,0,100,1,0,0,102,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));
|
||||
|
||||
playlist.data.string_mhod_count = 1;
|
||||
playlist.data.data_object_child_count = args.len() as u32;
|
||||
playlist.args = args;
|
||||
}
|
||||
|
||||
impl XDatabase {
|
||||
pub fn find_dataset(&mut self, data_type: u32) -> &mut XDataSet {
|
||||
self.children.iter_mut().find(|d| d.data.data_type == data_type).unwrap()
|
||||
@ -211,7 +241,7 @@ 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() {
|
||||
@ -254,7 +284,7 @@ impl XDatabase {
|
||||
return n + 1;
|
||||
}
|
||||
}
|
||||
if let XSomeList::Playlists(playlists) = &mut self.find_dataset(2).child {
|
||||
/*if let XSomeList::Playlists(playlists) = &mut self.find_dataset(2).child {
|
||||
for playlist in playlists {
|
||||
if playlist.data.is_master_playlist_flag != 0 {
|
||||
let a = playlist.args.iter().filter(|s| matches!(s, RawArgument(b))).last().unwrap();
|
||||
@ -263,8 +293,8 @@ impl XDatabase {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
1
|
||||
}*/
|
||||
102
|
||||
}
|
||||
|
||||
pub fn get_track(&mut self, id: u32) -> Option<XTrackItem> {
|
||||
@ -282,12 +312,12 @@ 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.persistent_playlist_id == pl_id);
|
||||
@ -311,6 +341,7 @@ impl XDatabase {
|
||||
let raw: Vec<u8> = vec![ 109,104,111,100,24,0,0,0,44,0,0,0,100,0,0,0,0,0,0,0,0,0,0,0,gr[0],gr[1],gr[2],gr[3],0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ];
|
||||
pl_item.data_object_child_count = 1;
|
||||
playlist.elems.push((pl_item, vec![RawArgument(raw)]));
|
||||
rebuild_quick_sort(playlist);
|
||||
}
|
||||
|
||||
/*if let XSomeList::Playlists(playlists) = &mut self.find_dataset(n).child {
|
||||
@ -344,7 +375,7 @@ impl XDatabase {
|
||||
playlists.push(playlist);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
pub fn remove_playlist(&mut self, pl_id: u64) {
|
||||
if let XSomeList::Playlists(playlists) = &mut self.find_dataset(2).child {
|
||||
playlists.retain_mut(|p| p.data.persistent_playlist_id != pl_id);
|
||||
|
Loading…
x
Reference in New Issue
Block a user