From 076c60658dae31341e08c01245bd0cc241e63472 Mon Sep 17 00:00:00 2001 From: Nathan Rashleigh Date: Wed, 24 Sep 2025 20:49:05 +1000 Subject: [PATCH] fix alignment of tables --- maple-rs/src/db.rs | 31 ++++++++++++++++--------------- maple.sublime-project | 2 +- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/maple-rs/src/db.rs b/maple-rs/src/db.rs index baff311..674066e 100644 --- a/maple-rs/src/db.rs +++ b/maple-rs/src/db.rs @@ -64,16 +64,21 @@ impl Database { // } pub fn export(self, path: &Path) -> std::io::Result<()> { - // 1) Reserve header page let mut f = File::create(path)?; - f.write_all(&vec![0u8; PAGE_SIZE as usize])?; + // reserve the file header space + // tables begin at 28 + f.write_all(&vec![0u8; 28 as usize])?; - let (table, pages) = Table::from_rows(PageType::Tracks, 1, PAGE_SIZE, self.tracks.values().cloned().take(1).map(Row::Track)).unwrap(); + // tables start here + let (tracks, tracks_pages) = Table::from_rows(PageType::Tracks, 1, PAGE_SIZE, self.tracks.values().cloned().take(2).map(Row::Track)).unwrap(); + // f.seek(SeekFrom::Start(0x1c)).unwrap(); + println!("Writing table at {:?}", f.stream_position()); + tracks.write_le(&mut f).unwrap(); - println!("{:?}", table); - println!("{:?}", pages); - table.write_le(&mut f).unwrap(); - pages.write_le_args(&mut f, (PAGE_SIZE.into(),)).unwrap(); + f.seek(SeekFrom::Start(4096)).unwrap(); + println!("Writing tracks_pages at {:?}", f.stream_position()); + tracks_pages.write_le_args(&mut f, (PAGE_SIZE.into(),)).unwrap(); + println!("{:?}", f.stream_position()); // page is somehow getting zeroed when ... writing? reading?? // validate it by writing and reading it back @@ -100,9 +105,9 @@ impl Database { let header = Header { // fill other required fields in your crate sequence: 0, // or previous+1 - next_unused_page: PageIndex(pages.len() as u32 + 1), + next_unused_page: PageIndex(tracks_pages.len() as u32 + 1), tables: vec![ - table, + tracks, // Table { page_type: PageType::PlaylistTree, first_page: PageIndex(tree_first), last_page: PageIndex(tree_last), empty_candidate: 0, /* … */ }, // Table { page_type: PageType::PlaylistEntries, first_page: PageIndex(entries_first), last_page: PageIndex(entries_last), empty_candidate: 0, /* … */ }, // Table { page_type: PageType::Artwork, first_page: PageIndex(art_first), last_page: PageIndex(art_last), empty_candidate: 0, /* … */ }, @@ -110,14 +115,10 @@ impl Database { ..Default::default() }; - // Write header at offset 0 and pad to one page f.seek(SeekFrom::Start(0))?; + println!("Writing header at {:?}", f.stream_position()); header.write_le(&mut f).unwrap(); - // pad residual of page 0 if BinWrite didn’t fill it: - let pos = f.stream_position()?; - if pos < PAGE_SIZE as u64 { - f.write_all(&vec![0u8; (PAGE_SIZE as u64 - pos) as usize])?; - } + Ok(()) } diff --git a/maple.sublime-project b/maple.sublime-project index 42b36c7..c736d97 100755 --- a/maple.sublime-project +++ b/maple.sublime-project @@ -11,7 +11,7 @@ "path": "C:\\Users\\ntr\\code\\rekordcrate", }, { - "path": "/home/ntr/code/rekordcrate" + "path": "/Users/nathanrashleigh/code/code/rekordcrate" }, ], "settings":