diff --git a/Cargo.toml b/Cargo.toml index 249dcef..953b6a5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itunesdb" -version = "0.1.36" +version = "0.1.37" edition = "2021" authors = ["alterwain"] diff --git a/src/artworkdb.rs b/src/artworkdb.rs index e31295e..4514908 100644 --- a/src/artworkdb.rs +++ b/src/artworkdb.rs @@ -101,6 +101,7 @@ pub mod deserializer { } pub mod serializer { + use log::info; use crate::artworkdb::aobjects::ADatabase; use crate::artworkdb::objects::{ChunkHeader, ChunkType}; @@ -108,6 +109,7 @@ pub mod serializer { let mut bytes: Vec = Vec::new(); for i in 0..(adb.children.len()) { let data_set = adb.children.get(i).unwrap(); + let mut entry_bytes = Vec::new(); for img in data_set.child.iter() { let mut args = Vec::new(); for arg in img.args.iter() { @@ -119,10 +121,13 @@ pub mod serializer { argv.append(&mut generate_header(ChunkType::LocationTag, 12, str_b.len())); argv.append(&mut str_b); }, - _ => { // 2 + 2 => { let mut data = [2u32.to_le_bytes(), 0u32.to_le_bytes(), 0u32.to_le_bytes()].concat(); argv.append(&mut generate_header(ChunkType::LocationTag, 12, 0)); argv.append(&mut data); + }, + _ => { + info!("Other datatype found!"); } } @@ -130,7 +135,7 @@ pub mod serializer { args.append(&mut generate_header(ChunkType::ImageName, 76, argv.len())); args.append(&mut bincode::serialize(name).unwrap()); } - + args.append(&mut argv); } @@ -138,12 +143,28 @@ pub mod serializer { let mut item = Vec::new(); item.append(&mut generate_header(ChunkType::ImageItem, 40, args.len())); item.append(&mut bincode::serialize(img.data.as_ref().unwrap()).unwrap()); + entry_bytes.append(&mut item); } if img.file.is_some() { - + entry_bytes.append(&mut generate_header(ChunkType::FileImage, 12, 0)); + entry_bytes.append(&mut bincode::serialize(img.file.as_ref().unwrap()).unwrap()); } + + entry_bytes.append(&mut args); } + + match data_set.data.data_type { + 1 => { + entry_bytes.append(&mut generate_header(ChunkType::ImageList, 80, data_set.child.len())); + entry_bytes.append(&mut [0; 76].to_vec()); + } // Image List + _ => { info!("Unknown data_set type!"); } + } + + bytes.append(&mut generate_header(ChunkType::DataSet, 84, entry_bytes.len())); + bytes.append(&mut [0; 80].to_vec()); + bytes.append(&mut bincode::serialize(&data_set.data).unwrap()) } bytes