feat: allow adding file info

This commit is contained in:
Anna 2023-01-27 16:14:32 -05:00
parent 8f5c55df10
commit cbc0f4246d
1 changed files with 16 additions and 9 deletions

View File

@ -110,7 +110,14 @@ impl MpdEncoder {
Ok(()) Ok(())
} }
pub fn add_texture_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result<()> { pub fn add_file_info(&mut self, hash: &[u8], file_info: FileInfo) {
self.hashes.entry(hash.to_vec())
.and_modify(|info| {
info.files.insert(file_info);
});
}
pub fn add_texture_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result<Vec<u8>> {
#[derive(binrw::BinRead)] #[derive(binrw::BinRead)]
#[br(little)] #[br(little)]
struct RawTextureHeader { struct RawTextureHeader {
@ -235,7 +242,7 @@ impl MpdEncoder {
.insert(file_info); .insert(file_info);
if contained { if contained {
return Ok(()); return Ok(hash.to_vec());
} }
// write the headers // write the headers
@ -263,14 +270,14 @@ impl MpdEncoder {
// seek past the data // seek past the data
self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?; self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?;
Ok(()) Ok(hash.to_vec())
} }
fn alignment_necessary(size: usize) -> usize { fn alignment_necessary(size: usize) -> usize {
ALIGN - (size % ALIGN) ALIGN - (size % ALIGN)
} }
pub fn add_model_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result<()> { pub fn add_model_file(&mut self, file_info: FileInfo, size: usize, mut data: impl Read) -> Result<Vec<u8>> {
#[derive(binrw::BinRead)] #[derive(binrw::BinRead)]
#[br(little)] #[br(little)]
struct RawModelHeader { struct RawModelHeader {
@ -431,7 +438,7 @@ impl MpdEncoder {
.insert(file_info); .insert(file_info);
if contained { if contained {
return Ok(()); return Ok(hash.to_vec());
} }
// write the file header // write the file header
@ -452,7 +459,7 @@ impl MpdEncoder {
// now seek past the data // now seek past the data
self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?; self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?;
Ok(()) Ok(hash.to_vec())
} }
fn write_lod(&mut self, lod: usize, lod_count: u8, offsets: &[u32], sizes: &[u32], mut data: impl Read, hasher: &mut impl Digest) -> Result<Vec<DatStdFileBlockInfos>> { fn write_lod(&mut self, lod: usize, lod_count: u8, offsets: &[u32], sizes: &[u32], mut data: impl Read, hasher: &mut impl Digest) -> Result<Vec<DatStdFileBlockInfos>> {
@ -486,7 +493,7 @@ impl MpdEncoder {
num_blocks num_blocks
} }
pub fn add_standard_file(&mut self, file_info: FileInfo, size: usize, data: impl Read) -> Result<()> { pub fn add_standard_file(&mut self, file_info: FileInfo, size: usize, data: impl Read) -> Result<Vec<u8>> {
// store position before doing anything // store position before doing anything
let pos = self.writer.stream_position().map_err(Error::Io)?; let pos = self.writer.stream_position().map_err(Error::Io)?;
@ -524,7 +531,7 @@ impl MpdEncoder {
self.writer.seek(SeekFrom::Start(pos)).map_err(Error::Io)?; self.writer.seek(SeekFrom::Start(pos)).map_err(Error::Io)?;
if contained { if contained {
return Ok(()); return Ok(hash.to_vec());
} }
// add headers // add headers
@ -546,7 +553,7 @@ impl MpdEncoder {
// seek past data // seek past data
self.writer.seek(SeekFrom::Start(after_blocks)).map_err(Error::Io)?; self.writer.seek(SeekFrom::Start(after_blocks)).map_err(Error::Io)?;
Ok(()) Ok(hash.to_vec())
} }
fn align_to(&mut self, n: usize) -> Result<usize> { fn align_to(&mut self, n: usize) -> Result<usize> {