Skip to content

Commit

Permalink
feat(autonomi): keep filesize in metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
b-zee committed Nov 7, 2024
1 parent c00a0d4 commit d461746
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 32 deletions.
2 changes: 1 addition & 1 deletion autonomi/examples/metamask/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export async function externalSignerPrivateDataPutToVault(peerAddr) {
const privateArchive = new autonomi.PrivateArchive();

// Add our data's data map chunk to the private archive
privateArchive.addNewFile("test", privateDataAccess);
privateArchive.addFile("test", privateDataAccess, autonomi.createMetadata(data.length));

// Get the private archive's bytes
const privateArchiveBytes = privateArchive.bytes();
Expand Down
20 changes: 6 additions & 14 deletions autonomi/src/client/archive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -50,29 +50,27 @@ pub struct Metadata {
pub created: u64,
/// Last file modification time taken from local file system. See [`std::fs::Metadata::modified`] for details per OS.
pub modified: u64,
/// File size in bytes
pub size: u64,
}

impl Metadata {
/// Create a new metadata struct
pub fn new() -> Self {
/// Create a new metadata struct with the current time as uploaded, created and modified.
pub fn new_with_size(size: u64) -> Self {
let now = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap_or(Duration::from_secs(0))
.as_secs();

Self {
uploaded: now,
created: now,
modified: now,
size,
}
}
}

impl Default for Metadata {
fn default() -> Self {
Self::new()
}
}

impl Archive {
/// Create a new emtpy local archive
/// Note that this does not upload the archive to the network
Expand Down Expand Up @@ -104,12 +102,6 @@ impl Archive {
self.map.insert(path, (data_addr, meta));
}

/// Add a file to a local archive, with default metadata
/// Note that this does not upload the archive to the network
pub fn add_new_file(&mut self, path: PathBuf, data_addr: DataAddr) {
self.map.insert(path, (data_addr, Metadata::new()));
}

/// List all files in the archive
pub fn files(&self) -> Vec<(PathBuf, Metadata)> {
self.map
Expand Down
6 changes: 0 additions & 6 deletions autonomi/src/client/archive_private.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,6 @@ impl PrivateArchive {
self.map.insert(path, (data_map, meta));
}

/// Add a file to a local archive, with default metadata
/// Note that this does not upload the archive to the network
pub fn add_new_file(&mut self, path: PathBuf, data_map: PrivateDataAccess) {
self.map.insert(path, (data_map, Metadata::new()));
}

/// List all files in the archive
pub fn files(&self) -> Vec<(PathBuf, Metadata)> {
self.map
Expand Down
5 changes: 4 additions & 1 deletion autonomi/src/client/fs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,8 @@ impl Client {
tracing::debug!("Encryption took: {:.2?}", now.elapsed());
let map_xor_name = *data_map_chunk.address().xorname();

archive.add_file(path, map_xor_name, Metadata::new());
let metadata = metadata_from_entry(&entry);
archive.add_file(path, map_xor_name, metadata);
}

let root_serialized = rmp_serde::to_vec(&archive)?;
Expand All @@ -234,6 +235,7 @@ pub(crate) fn metadata_from_entry(entry: &walkdir::DirEntry) -> Metadata {
uploaded: 0,
created: 0,
modified: 0,
size: 0,
};
}
};
Expand Down Expand Up @@ -266,5 +268,6 @@ pub(crate) fn metadata_from_entry(entry: &walkdir::DirEntry) -> Metadata {
.as_secs(),
created,
modified,
size: fs_metadata.len(),
}
}
33 changes: 26 additions & 7 deletions autonomi/src/client/wasm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ use wasm_bindgen::prelude::*;
/// const dataAddr = await client.putData(new Uint8Array([0, 1, 2, 3]), wallet);
///
/// const archive = new Archive();
/// archive.addNewFile("foo", dataAddr);
/// archive.addFile("foo", dataAddr, createMetadata(4));
///
/// const archiveAddr = await client.putArchive(archive, wallet);
/// const archiveFetched = await client.getArchive(archiveAddr);
Expand Down Expand Up @@ -178,6 +178,13 @@ mod archive {
#[wasm_bindgen(js_name = Archive)]
pub struct JsArchive(Archive);

/// Create new metadata with the current time as uploaded, created and modified.
#[wasm_bindgen(js_name = createMetadata)]
pub fn create_metadata(size: u64) -> Result<JsValue, JsError> {
let metadata = Metadata::new_with_size(size);
Ok(serde_wasm_bindgen::to_value(&metadata)?)
}

#[wasm_bindgen(js_class = Archive)]
impl JsArchive {
/// Create a new archive.
Expand All @@ -187,11 +194,17 @@ mod archive {
}

/// Add a new file to the archive.
#[wasm_bindgen(js_name = addNewFile)]
pub fn add_new_file(&mut self, path: String, data_addr: String) -> Result<(), JsError> {
#[wasm_bindgen(js_name = addFile)]
pub fn add_file(
&mut self,
path: String,
data_addr: String,
metadata: JsValue,
) -> Result<(), JsError> {
let path = PathBuf::from(path);
let data_addr = str_to_addr(&data_addr)?;
self.0.add_new_file(path, data_addr);
let metadata: Metadata = serde_wasm_bindgen::from_value(metadata)?;
self.0.add_file(path, data_addr, metadata);

Ok(())
}
Expand Down Expand Up @@ -268,11 +281,17 @@ mod archive_private {
}

/// Add a new file to the private archive.
#[wasm_bindgen(js_name = addNewFile)]
pub fn add_new_file(&mut self, path: String, data_map: JsValue) -> Result<(), JsError> {
#[wasm_bindgen(js_name = addFile)]
pub fn add_file(
&mut self,
path: String,
data_map: JsValue,
metadata: JsValue,
) -> Result<(), JsError> {
let path = PathBuf::from(path);
let data_map: PrivateDataAccess = serde_wasm_bindgen::from_value(data_map)?;
self.0.add_new_file(path, data_map);
let metadata: Metadata = serde_wasm_bindgen::from_value(metadata)?;
self.0.add_file(path, data_map, metadata);

Ok(())
}
Expand Down
4 changes: 2 additions & 2 deletions autonomi/tests-js/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ describe('autonomi', function () {
const data = randomData(32);
const addr = await client.putData(data, wallet);
const archive = new atnm.Archive();
archive.addNewFile("foo", addr);
archive.addFile("foo", addr, atnm.createMetadata(data.length));
const archiveAddr = await client.putArchive(archive, wallet);

const archiveFetched = await client.getArchive(archiveAddr);
Expand All @@ -59,7 +59,7 @@ describe('autonomi', function () {
const secretKey = atnm.genSecretKey();

const archive = new atnm.Archive();
archive.addNewFile('foo', addr);
archive.addFile('foo', addr, atnm.createMetadata(data.length));
const archiveAddr = await client.putArchive(archive, wallet);

const userData = new atnm.UserData();
Expand Down
6 changes: 5 additions & 1 deletion autonomi/tests/external_signer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,11 @@ async fn external_signer_put() -> eyre::Result<()> {
.await?;

let mut private_archive = PrivateArchive::new();
private_archive.add_file("test-file".into(), private_data_access, Metadata::default());
private_archive.add_file(
"test-file".into(),
private_data_access,
Metadata::new_with_size(data.len() as u64),
);

let archive_serialized = private_archive.into_bytes()?;

Expand Down

0 comments on commit d461746

Please sign in to comment.