modified: outdb
modified: src/main.rs
This commit is contained in:
parent
34bf440691
commit
fdecbcc093
39
src/main.rs
39
src/main.rs
@ -24,8 +24,8 @@ impl From<[u8; 4]> for ChunkType {
|
||||
match value {
|
||||
[0x6D, 0x68, 0x62, 0x64] => ChunkType::Database,
|
||||
[0x6D, 0x68, 0x73, 0x64] => ChunkType::DataSet,
|
||||
[0x6D, 0x68, 0x69, 0x61] => ChunkType::AlbumList,
|
||||
[0x6D, 0x68, 0x6C, 0x61] => ChunkType::AlbumItem,
|
||||
[0x6D, 0x68, 0x69, 0x61] => ChunkType::AlbumItem,
|
||||
[0x6D, 0x68, 0x6C, 0x61] => ChunkType::AlbumList,
|
||||
[0x6D, 0x68, 0x6C, 0x74] => ChunkType::TrackList,
|
||||
[0x6D, 0x68, 0x69, 0x74] => ChunkType::TrackItem,
|
||||
[0x6D, 0x68, 0x6F, 0x64] => ChunkType::StringTypes,
|
||||
@ -41,8 +41,8 @@ impl From<ChunkType> for [u8; 4] {
|
||||
match value {
|
||||
ChunkType::Database => [0x6D, 0x68, 0x62, 0x64],
|
||||
ChunkType::DataSet => [0x6D, 0x68, 0x73, 0x64],
|
||||
ChunkType::AlbumList => [0x6D, 0x68, 0x69, 0x61],
|
||||
ChunkType::AlbumItem => [0x6D, 0x68, 0x6C, 0x61],
|
||||
ChunkType::AlbumItem => [0x6D, 0x68, 0x69, 0x61],
|
||||
ChunkType::AlbumList => [0x6D, 0x68, 0x6C, 0x61],
|
||||
ChunkType::TrackList => [0x6D, 0x68, 0x6C, 0x74],
|
||||
ChunkType::TrackItem => [0x6D, 0x68, 0x69, 0x74],
|
||||
ChunkType::StringTypes => [0x6D, 0x68, 0x6F, 0x64],
|
||||
@ -250,11 +250,11 @@ pub fn parse_bytes(data: &[u8]) -> XDatabase {
|
||||
ChunkType::DataSet => {
|
||||
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||
let ds: DataSet = bincode::deserialize(&data[i..i+u]).unwrap();
|
||||
info!("val: {:?}", ds);
|
||||
info!("DataSet: {:?}", ds);
|
||||
xdb.children.push(XDataSet { header: header, data: ds.clone(), child: match ds.data_type {
|
||||
3 => XSomeList::Playlists(Vec::new()), // Playlist List
|
||||
4 => XSomeList::AlbumList(Vec::new()), // Album List
|
||||
_ => XSomeList::TrackList(Vec::new()) // 1 Track List
|
||||
_ => XSomeList::TrackList(Vec::new()) // Track List (1)
|
||||
}});
|
||||
},
|
||||
ChunkType::AlbumList => {
|
||||
@ -266,6 +266,7 @@ pub fn parse_bytes(data: &[u8]) -> XDatabase {
|
||||
u = usize::try_from(header.end_of_chunk).unwrap() - 12;
|
||||
let ai: AlbumItem = bincode::deserialize(&data[i..i+u]).unwrap();
|
||||
info!("val: {:?}", ai);
|
||||
info!("AlbumItem: {}", u);
|
||||
if let XSomeList::AlbumList(albums) = &mut xdb.find_dataset(4).child {
|
||||
albums.push(XAlbumItem {header: header, data: ai,args: Vec::new()});
|
||||
}
|
||||
@ -501,11 +502,13 @@ fn to_bytes(xdb: XDatabase) -> Vec<u8> {
|
||||
pl_bytes.append(&mut bincode::serialize(&playlist.data).unwrap());
|
||||
pl_bytes.append(&mut args);
|
||||
}
|
||||
let mhlp = ChunkHeader { chunk_type: ChunkType::PlaylistList.into(), end_of_chunk: 12, children_count: playlists.len() as u32 };
|
||||
let mhlp = ChunkHeader { chunk_type: ChunkType::PlaylistList.into(), end_of_chunk: 92, children_count: playlists.len() as u32 };
|
||||
let mut mhlp = bincode::serialize(&mhlp).unwrap();
|
||||
bytes.append(&mut generate_header(ChunkType::DataSet, 4, mhlp.len()));
|
||||
bytes.append(&mut generate_header(ChunkType::DataSet, 84, mhlp.len()));
|
||||
bytes.append(&mut bincode::serialize(&data_set.data).unwrap());
|
||||
bytes.append(&mut generate_zeroes(92));
|
||||
bytes.append(&mut mhlp);
|
||||
bytes.append(&mut generate_zeroes(92));
|
||||
bytes.append(&mut pl_bytes);
|
||||
},
|
||||
XSomeList::AlbumList(albums) => {
|
||||
@ -513,15 +516,18 @@ fn to_bytes(xdb: XDatabase) -> Vec<u8> {
|
||||
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, 20,args.len()));
|
||||
al_bytes.append(&mut generate_header(ChunkType::AlbumItem, 76,args.len()));
|
||||
al_bytes.append(&mut bincode::serialize(&album.data).unwrap());
|
||||
al_bytes.append(&mut generate_zeroes(68));
|
||||
al_bytes.append(&mut args);
|
||||
}
|
||||
let mhla = ChunkHeader { chunk_type: ChunkType::AlbumList.into(), end_of_chunk: 12, children_count: albums.len() as u32 };
|
||||
let mhla = ChunkHeader { chunk_type: ChunkType::AlbumList.into(), end_of_chunk: 92, children_count: albums.len() as u32 };
|
||||
let mut mhla = bincode::serialize(&mhla).unwrap();
|
||||
bytes.append(&mut generate_header(ChunkType::DataSet, 4, mhla.len()));
|
||||
bytes.append(&mut generate_header(ChunkType::DataSet, 84, mhla.len()));
|
||||
bytes.append(&mut bincode::serialize(&data_set.data).unwrap());
|
||||
bytes.append(&mut generate_zeroes(92));
|
||||
bytes.append(&mut mhla);
|
||||
bytes.append(&mut generate_zeroes(92));
|
||||
bytes.append(&mut al_bytes);
|
||||
},
|
||||
XSomeList::TrackList(tracks) => {
|
||||
@ -529,15 +535,18 @@ fn to_bytes(xdb: XDatabase) -> Vec<u8> {
|
||||
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, 292,args.len()));
|
||||
tr_bytes.append(&mut generate_header(ChunkType::TrackItem, 612,args.len()));
|
||||
tr_bytes.append(&mut bincode::serialize(&track.data).unwrap());
|
||||
tr_bytes.append(&mut generate_zeroes(332));
|
||||
tr_bytes.append(&mut args);
|
||||
}
|
||||
let mhlt = ChunkHeader { chunk_type: ChunkType::TrackList.into(), end_of_chunk: 12, children_count: tracks.len() as u32 };
|
||||
let mhlt = ChunkHeader { chunk_type: ChunkType::TrackList.into(), end_of_chunk: 92, children_count: tracks.len() as u32 };
|
||||
let mut mhlt = bincode::serialize(&mhlt).unwrap();
|
||||
bytes.append(&mut generate_header(ChunkType::DataSet, 4, mhlt.len()));
|
||||
bytes.append(&mut generate_header(ChunkType::DataSet, 84, mhlt.len()));
|
||||
bytes.append(&mut bincode::serialize(&data_set.data).unwrap());
|
||||
bytes.append(&mut generate_zeroes(92));
|
||||
bytes.append(&mut mhlt);
|
||||
bytes.append(&mut generate_zeroes(92));
|
||||
bytes.append(&mut tr_bytes);
|
||||
}
|
||||
}
|
||||
@ -564,7 +573,7 @@ fn main() {
|
||||
Ok(n) => {
|
||||
let data = &buf[..n];
|
||||
let xdb = parse_bytes(data);
|
||||
//info!("XDB: {:?}", xdb);
|
||||
info!("XDB: {:?}", xdb);
|
||||
//let mut op = File::create("outdb").unwrap();
|
||||
//info!("Write res: {:?}", op.write(&to_bytes(xdb)));
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user