diff --git a/outdb b/outdb index 59bfd87..da2cdc4 100644 Binary files a/outdb and b/outdb differ diff --git a/src/main.rs b/src/main.rs index e03961c..6aaad15 100644 --- a/src/main.rs +++ b/src/main.rs @@ -393,7 +393,7 @@ fn x_args_to_bytes(args: &Vec) -> Vec { let h = bincode::serialize(&ChunkHeader { chunk_type: ChunkType::StringTypes.into(), end_of_chunk: 0x18, - children_count: 0x18 + s.len() as u32 + children_count: 16 + 0x18 + s.len() as u32 }).unwrap(); b = [h, b, s].concat(); return b; @@ -422,7 +422,7 @@ fn to_bytes(xdb: XDatabase) -> Vec { for u in 0..playlists.len() { let playlist = playlists.get(u).unwrap(); let mut args = x_args_to_bytes(&playlist.args); - pl_bytes.append(&mut generate_header(ChunkType::Playlist, std::mem::size_of::(),args.len())); + pl_bytes.append(&mut generate_header(ChunkType::Playlist, 36,args.len())); pl_bytes.append(&mut bincode::serialize(&playlist.data).unwrap()); pl_bytes.append(&mut args); } @@ -438,7 +438,7 @@ fn to_bytes(xdb: XDatabase) -> Vec { for u in 0..albums.len() { let album = albums.get(u).unwrap(); let mut args = x_args_to_bytes(&album.args); - al_bytes.append(&mut generate_header(ChunkType::AlbumItem, std::mem::size_of::(),args.len())); + al_bytes.append(&mut generate_header(ChunkType::AlbumItem, 20,args.len())); al_bytes.append(&mut bincode::serialize(&album.data).unwrap()); al_bytes.append(&mut args); } @@ -454,7 +454,7 @@ fn to_bytes(xdb: XDatabase) -> Vec { for u in 0..tracks.len() { let track = tracks.get(u).unwrap(); let mut args = x_args_to_bytes(&track.args); - tr_bytes.append(&mut generate_header(ChunkType::TrackItem, std::mem::size_of::(),args.len())); + tr_bytes.append(&mut generate_header(ChunkType::TrackItem, 292,args.len())); tr_bytes.append(&mut bincode::serialize(&track.data).unwrap()); tr_bytes.append(&mut args); } @@ -467,8 +467,10 @@ fn to_bytes(xdb: XDatabase) -> Vec { } } } - bytes = [bincode::serialize(&xdb.data.unwrap()).unwrap(), bytes].concat(); - bytes = [generate_header(ChunkType::Database, std::mem::size_of::(), bytes.len()), bytes].concat(); + let sdb = bincode::serialize(&xdb.data.unwrap()).unwrap(); + let sdb_len = sdb.len(); + bytes = [sdb, bytes].concat(); + bytes = [generate_header(ChunkType::Database, sdb_len, bytes.len()), bytes].concat(); bytes } @@ -479,7 +481,7 @@ fn main() { .filter(None, LevelFilter::Info) .init(); - let mut f = File::open("D:\\Documents\\iTunes\\iTunesDB").unwrap(); + let mut f = File::open("D:\\Documents\\iTunes\\iTunesDB").unwrap(); // D:\\Documents\\iTunes\\iTunesDB let mut buf = Vec::new(); match f.read_to_end(&mut buf) { Ok(n) => {