From 4cfabd239b2a622db1d5395a34b34db93a9f0c67 Mon Sep 17 00:00:00 2001 From: "alterwain@protonmail.com" Date: Sun, 9 Feb 2025 02:51:30 +0300 Subject: [PATCH] modified: outdb modified: src/main.rs modified: src/objects.rs --- outdb | Bin 15758 -> 16862 bytes src/main.rs | 48 +++++++++++++++++++++++++++++++----------------- src/objects.rs | 2 +- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/outdb b/outdb index ebc049e5073c72e6c15e185cdc52086185fa52b8..c5aad1a197d3b1c152e3d633811d9a51b6a63f69 100644 GIT binary patch delta 820 zcmeCHzSqpCkeiW|@`Ztc;hrM{10#?w0b*7lPPaW^zvaYS_lXJ`oW6`-UHvQTq8KM` zl-`&V!pNHiRG{PZj>S#U){1H3M(fE90vt>W*e5p_yG=YGz?qwoQxXGI!Zdj!Tj=Ct zOni)Kldm$_Pdp$oS%+Dhk#X_?7Lmz0%v_92lgpWN8M7uoWiFX4V9qu{5XBJ25Dp~u7;+g37>pTmGcrpGm>3umm>C#=h+zW4 z3J#70pa2L=wqcfr*vFlu02TofglwIBfhEV%38)Yh9xwo6O93%VEQBG0A(f$$L4hF& zNGAfrO##TuXDFRKlXanZ1Oo^noLZcc0Mxr-avU3H zCOb%pu=)YzCt%9^f#iWv!@7YB78$G9l4#+8e(VnDhdN;L0jV=QAb+MhW~6$a@$Uut zQ-_BYoX{Wv0Qawni~$=nQ0e4!C0iDd7MRTBI&+21I?5anS#wQW)Ns0^nZ?AU!#FvS z(QWewxrI!V_4O}*xUhK22K&5)1^oU~r J<~nl$HUQ5_?O*@^ delta 587 zcmccD%-C10keiW|@`Ztcq0g3qfe}cT05K~N`|p@x)@gAiWuk%xC;P2kM{XZZyTUke zqx8m{5Jp}Zpn_!Ag`O+;=YMCKxY3#`H={Tu0VwFeGWmkJ+r$F`thpIEB{7pf^11^# zlaDY7Fv?DjWV4^Vft`f|WX)>-qQ{dJn9V0UbBIpPVdi3Focxkc-r77d& zdgIGr3qSLVnJ-_Fqy)B*nSmJ?0%#WgGSOiJE1hmRU*>DaGcl0T$qy7*I53o+vld_j E03o%ub^rhX diff --git a/src/main.rs b/src/main.rs index 402c957..d33f391 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use std::{fs::File, io::{Read, Write}}; use env_logger::Builder; use log::{error, info, LevelFilter}; use rand::Rng; -use xobjects::{XArgument, XSomeList}; +use xobjects::{XArgument, XPlArgument, XSomeList}; mod objects; mod xobjects; @@ -22,7 +22,7 @@ fn main() { .init(); // /Users/michael/Documents/ipod/iTunes/iTunesDB - let mut f = File::open("D:\\Documents\\iTunes\\iTunesDB").unwrap(); // D:\\Documents\\iTunes\\iTunesDB + let mut f = File::open("/Users/michael/Documents/ipod/iTunes/iTunesDB").unwrap(); // D:\\Documents\\iTunes\\iTunesDB let mut buf = Vec::new(); match f.read_to_end(&mut buf) { Ok(n) => { @@ -30,15 +30,10 @@ fn main() { let mut xdb = deserializer::parse_bytes(data); //info!("XDB: {:#?}", xdb); - - let json = serde_json::to_string_pretty(&xdb).unwrap(); - let mut f1 = File::create("output.json").unwrap(); - f1.write(json.as_bytes()); - - /* let unique_id = rand::thread_rng().gen_range(10..99); + let unique_id = rand::thread_rng().gen_range(10..999); if let XSomeList::TrackList(tracks) = &mut xdb.find_dataset(1).child { - /*let mut item = (*tracks.last().unwrap()).clone(); + let mut item = (*tracks.last().unwrap()).clone(); let mut xargs = Vec::new(); xargs.push(XArgument { arg_type: 1, val: String::from("They beat you") }); xargs.push(XArgument { arg_type: 6, val: String::from("MPEG audio file")}); @@ -48,21 +43,40 @@ fn main() { item.data.unique_id = unique_id; item.data.dbid = rand::thread_rng().gen_range(0..10000); item.data.dbid2 = rand::thread_rng().gen_range(0..10000); - tracks.push(item);*/ - let mut item = tracks.last_mut().unwrap(); - item.args.first_mut().unwrap().val = String::from("Goy next door"); - } */ + tracks.push(item); + } - /*if let XSomeList::Playlists(playlists) = &mut xdb.find_dataset(3).child { + if let XSomeList::Playlists(playlists) = &mut xdb.find_dataset(2).child { let playlist = playlists.last_mut().unwrap(); let elem = playlist.elems.last().unwrap(); let mut pl_item = elem.0.clone(); pl_item.track_id = unique_id; - playlist.elems.push((pl_item, elem.1.clone())); - }*/ + + pl_item.group_id = rand::thread_rng().gen_range(10..255); + let mut args = elem.1.clone(); + if let XPlArgument::RawArgument(raw) = args.last_mut().unwrap() { + raw[24] = pl_item.group_id as u8; + } + + playlist.elems.push((pl_item, args)); + } + + if let XSomeList::Playlists(playlists) = &mut xdb.find_dataset(3).child { + let playlist = playlists.last_mut().unwrap(); + let elem = playlist.elems.last().unwrap(); + let mut pl_item = elem.0.clone(); + pl_item.track_id = unique_id; + pl_item.group_id = rand::thread_rng().gen_range(10..255); + let mut args = elem.1.clone(); + if let XPlArgument::RawArgument(raw) = args.last_mut().unwrap() { + raw[24] = pl_item.group_id as u8; + } + + playlist.elems.push((pl_item, args)); + } let mut op = File::create("outdb").unwrap(); - info!("Write res: {:?}", op.write(&serializer::to_bytes(xdb))); + info!("Write res: {:?}", op.write(&serializer::to_bytes(xdb))); }, Err(e) => { error!("Error: {}",e); diff --git a/src/objects.rs b/src/objects.rs index 05f6fb5..2365cf1 100644 --- a/src/objects.rs +++ b/src/objects.rs @@ -230,7 +230,7 @@ pub struct PlaylistItem { data_object_child_count: u32, podcast_grouping_flag: u16, unk4: u16, - group_id: u32, + pub group_id: u32, pub track_id: u32, timestamp: u32, podcast_grouping_reference: u32,