From 45f90c65d41afcd7b634b7cf7dbdb27a77df9fc9 Mon Sep 17 00:00:00 2001 From: alterwain Date: Sun, 26 Jan 2025 01:23:55 +0300 Subject: [PATCH] modified: src/main.rs --- src/main.rs | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/src/main.rs b/src/main.rs index 50b6c9d..75c2bb3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -127,6 +127,21 @@ struct Entry { // mhod unk4: u32 } +#[derive(Archive, Deserialize, Serialize, Debug, PartialEq)] +#[rkyv(compare(PartialEq), derive(Debug))] +struct Playlist { + data_object_child_count: u32, + playlist_item_count: u32, + is_master_playlist_flag: u8, + unk: [u8; 3], + timestamp: u32, + persistent_playlist_id: u64, + unk3: u32, + string_mhod_count: u16, + podcast_flag: u16, + list_sort_order: u32 +} + enum ChunkState { Header, Data @@ -176,10 +191,9 @@ fn db(data: &[u8]) { }, [109, 104, 111, 100] => { // mhod u = usize::try_from(header.children_count).unwrap() - 12; - //info!("head: {}, {}", header.end_of_chunk, header.children_count); let header_offset: usize = (header.end_of_chunk + 4) as usize; let str_end: usize = (header.children_count - 12) as usize; - let entry = rkyv::access::(&data[i..]).unwrap(); + let entry = rkyv::access::(&data[i..i+28]).unwrap(); info!("val: {:?}", &entry); let mut bytes = Vec::new(); @@ -190,10 +204,19 @@ fn db(data: &[u8]) { } h+=1; } - //info!("bytes: {:?}", &data[i+header_offset..i+str_end]); let g = String::from_utf8(bytes).unwrap(); info!("str: {}", g); - } + }, + [0x6D, 0x68, 0x6C, 0x70] => { // mhlp + //info!("head: {}, {}", header.end_of_chunk, header.children_count); + info!("Playlists count: {}", header.children_count); + u = usize::try_from(header.end_of_chunk).unwrap() - 12; + }, + [0x6D, 0x68, 0x79, 0x70] => { // mhyp + u = usize::try_from(header.end_of_chunk).unwrap() - 12; + let playlist = rkyv::access::(&data[i..i+u]).unwrap(); + info!("playlist: {:?}", playlist); + }, _ => return } i += u;