From 50c6194a797ae5e2cb9a47d3dd162e029c5d1fc1 Mon Sep 17 00:00:00 2001 From: "alterwain@protonmail.com" Date: Sat, 15 Feb 2025 23:39:56 +0300 Subject: [PATCH] 0.1.32 upd --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/artworkdb.rs | 54 +++++++++++++++++++----------------------------- 3 files changed, 23 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 18377bd..dd60b7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,7 +90,7 @@ checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] name = "itunesdb" -version = "0.1.30" +version = "0.1.32" dependencies = [ "bincode", "env_logger", diff --git a/Cargo.toml b/Cargo.toml index 555028f..180eada 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itunesdb" -version = "0.1.31" +version = "0.1.32" edition = "2021" authors = ["alterwain"] diff --git a/src/artworkdb.rs b/src/artworkdb.rs index 269202c..4891c06 100644 --- a/src/artworkdb.rs +++ b/src/artworkdb.rs @@ -1,6 +1,6 @@ pub mod deserializer { use log::info; - use crate::artworkdb::aobjects::{ADataSet, ADatabase, AImageItem, ALocationTag, ASomeList}; + use crate::artworkdb::aobjects::{ADataSet, ADatabase, AImageItem, ALocationTag}; use crate::artworkdb::objects::{ChunkHeader, ChunkType, DataSet, Database, ImageItem, ImageName, LocationTag}; enum ChunkState { @@ -37,9 +37,7 @@ pub mod deserializer { u = usize::try_from(header.end_of_chunk).unwrap() - 12; let ds: DataSet = bincode::deserialize(&data[i..i + u]).unwrap(); last_type = ds.data_type; - adb.children.push(ADataSet { header, data: ds, child: match ds.data_type { - _ => ASomeList::Images(Vec::new()), // 1 - }}); + adb.children.push(ADataSet { header, data: ds, child: Vec::new()}); }, ChunkType::ImageList => { info!("ImageList tag"); @@ -49,38 +47,35 @@ pub mod deserializer { info!("ImageItem tag"); 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, args: Vec::new() }); - } + let images = &mut adb.find_dataset(last_type).child; + images.push(AImageItem { data: ai, args: Vec::new() }); }, ChunkType::LocationTag => { u = usize::try_from(header.end_of_chunk).unwrap() - 12; let ds: LocationTag = bincode::deserialize(&data[i..i + u]).unwrap(); - if let ASomeList::Images(images) = &mut adb.find_dataset(1).child { - let mut str = None; - if ds.tag_type == 3 { - let mut bytes = Vec::new(); - let str_end = u32::from_le_bytes(data[i+12..i+16].try_into().unwrap()) as usize; - let mut h = i+24; - u += 12 + str_end; - while h < i+24+str_end { - bytes.push(u16::from_le_bytes(data[h..h+2].try_into().unwrap())); - h+=2; - } - let g = String::from_utf16(&bytes).unwrap(); - info!("str: {}", g); - str = Some(g); + let images = &mut adb.find_dataset(last_type).child; + let mut str = None; + if ds.tag_type == 3 { + let mut bytes = Vec::new(); + let str_end = u32::from_le_bytes(data[i+12..i+16].try_into().unwrap()) as usize; + let mut h = i+24; + u += 12 + str_end; + while h < i+24+str_end { + bytes.push(u16::from_le_bytes(data[h..h+2].try_into().unwrap())); + h+=2; } - images.last_mut().unwrap().args.push(ALocationTag { data: ds, str, child: None }); + let g = String::from_utf16(&bytes).unwrap(); + info!("str: {}", g); + str = Some(g); } + images.last_mut().unwrap().args.push(ALocationTag { data: ds, str, child: None }); }, 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().args.last_mut().unwrap().child = Some(ds); - } + let images = &mut adb.find_dataset(last_type).child; + images.last_mut().unwrap().args.last_mut().unwrap().child = Some(ds); }, _ => { u = 1; info!("Unknown stuff happened"); } } @@ -114,14 +109,7 @@ pub mod aobjects { pub struct ADataSet { pub header: ChunkHeader, pub data: DataSet, - pub child: ASomeList - } - - #[derive(Debug, serde::Serialize)] - pub enum ASomeList { - Images(Vec), // 1 - Albums, // 2 - Files, // 3 + pub child: Vec } #[derive(Debug, serde::Serialize)]