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(())
}
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)]
#[br(little)]
struct RawTextureHeader {
@ -235,7 +242,7 @@ impl MpdEncoder {
.insert(file_info);
if contained {
return Ok(());
return Ok(hash.to_vec());
}
// write the headers
@ -263,14 +270,14 @@ impl MpdEncoder {
// seek past the data
self.writer.seek(SeekFrom::Start(after_data)).map_err(Error::Io)?;
Ok(())
Ok(hash.to_vec())
}
fn alignment_necessary(size: usize) -> usize {
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)]
#[br(little)]
struct RawModelHeader {
@ -431,7 +438,7 @@ impl MpdEncoder {
.insert(file_info);
if contained {
return Ok(());
return Ok(hash.to_vec());
}
// write the file header
@ -452,7 +459,7 @@ impl MpdEncoder {
// now seek past the data
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>> {
@ -486,7 +493,7 @@ impl MpdEncoder {
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
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)?;
if contained {
return Ok(());
return Ok(hash.to_vec());
}
// add headers
@ -546,7 +553,7 @@ impl MpdEncoder {
// seek past data
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> {