diff --git a/Cargo.lock b/Cargo.lock index 043e890..1867c19 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,7 +90,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "itunesdb" -version = "0.1.22" +version = "0.1.23" dependencies = [ "bincode", "env_logger", diff --git a/Cargo.toml b/Cargo.toml index 89960e2..7ac9ba0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itunesdb" -version = "0.1.22" +version = "0.1.23" edition = "2021" authors = ["alterwain"] diff --git a/src/artworkdb.rs b/src/artworkdb.rs index 72c3bb4..4a98cdc 100644 --- a/src/artworkdb.rs +++ b/src/artworkdb.rs @@ -1,7 +1,7 @@ pub mod deserializer { use log::info; - use crate::artworkdb::aobjects::{ADataSet, ADatabase, AImageItem, ASomeList}; - use crate::artworkdb::objects::{ChunkHeader, ChunkType, DataSet, Database, ImageItem, ImageName}; + use crate::artworkdb::aobjects::{ADataSet, ADatabase, AImageArg, AImageItem, ASomeList}; + use crate::artworkdb::objects::{ChunkHeader, ChunkType, DataSet, Database, ImageItem, ImageName, LocationTag}; enum ChunkState { Header, @@ -50,19 +50,22 @@ pub mod deserializer { u = usize::try_from(header.end_of_chunk).unwrap() - 12; let ai: ImageItem = bincode::deserialize(&data[i..i+u]).unwrap(); if let ASomeList::Images(images) = &mut adb.find_dataset(1).child { - images.push(AImageItem { data: ai, name: None }); + images.push(AImageItem { data: ai, args: Vec::new() }); } }, ChunkType::LocationTag => { u = usize::try_from(header.end_of_chunk).unwrap() - 12; - info!("Location tag"); + let ds: LocationTag = bincode::deserialize(&data[i..i + u]).unwrap(); + if let ASomeList::Images(images) = &mut adb.find_dataset(1).child { + images.last_mut().unwrap().args.push(AImageArg::Location(ds)); + } }, ChunkType::ImageName => { info!("ImageName tag"); u = usize::try_from(header.end_of_chunk).unwrap() - 12; let ds: ImageName = bincode::deserialize(&data[i..i + u]).unwrap(); if let ASomeList::Images(images) = &mut adb.find_dataset(1).child { - images.last_mut().unwrap().name = Some(ds); + images.last_mut().unwrap().args.push(AImageArg::Name(ds)); } }, _ => { u = 1; info!("Unknown stuff happened"); } @@ -78,7 +81,7 @@ pub mod deserializer { } pub mod aobjects { - use crate::artworkdb::objects::{ChunkHeader, DataSet, Database, ImageItem, ImageName}; + use crate::artworkdb::objects::{ChunkHeader, DataSet, Database, ImageItem, ImageName, LocationTag}; #[derive(Debug, serde::Serialize)] pub struct ADatabase { @@ -110,7 +113,13 @@ pub mod aobjects { #[derive(Debug, serde::Serialize)] pub struct AImageItem { pub data: ImageItem, - pub name: Option, + pub args: Vec, + } + + #[derive(Debug, serde::Serialize)] + pub enum AImageArg { + Name(ImageName), + Location(LocationTag) } }