aboutsummaryrefslogtreecommitdiff
path: root/base/src/database.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-29 23:09:54 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-29 23:09:54 +0100
commit59825d68efa1077382fd6acac73f75ae9dc3680a (patch)
tree5f948eddf7b4c85f245359c35c653ab8768ba8f4 /base/src/database.rs
parent8099c51e56b6d253c05cac9c235f52027ad736fa (diff)
downloadjellything-59825d68efa1077382fd6acac73f75ae9dc3680a.tar
jellything-59825d68efa1077382fd6acac73f75ae9dc3680a.tar.bz2
jellything-59825d68efa1077382fd6acac73f75ae9dc3680a.tar.zst
mtime based incremental import
Diffstat (limited to 'base/src/database.rs')
-rw-r--r--base/src/database.rs22
1 files changed, 21 insertions, 1 deletions
diff --git a/base/src/database.rs b/base/src/database.rs
index 1f3efbf..a213a40 100644
--- a/base/src/database.rs
+++ b/base/src/database.rs
@@ -29,7 +29,7 @@ const T_USER_NODE: TableDefinition<(&str, [u8; 32]), Ser<NodeUserData>> =
TableDefinition::new("user_node");
const T_INVITE: TableDefinition<&str, ()> = TableDefinition::new("invite");
const T_NODE: TableDefinition<[u8; 32], Ser<Node>> = TableDefinition::new("node");
-const T_IMPORT_MTIME: TableDefinition<&[u8], u64> = TableDefinition::new("import-mtime");
+const T_IMPORT_FILE_MTIME: TableDefinition<&[u8], u64> = TableDefinition::new("import_file_mtime");
#[derive(Clone)]
pub struct Database {
@@ -56,6 +56,7 @@ impl Database {
drop(txn.open_table(T_USER)?);
drop(txn.open_table(T_USER_NODE)?);
drop(txn.open_table(T_NODE)?);
+ drop(txn.open_table(T_IMPORT_FILE_MTIME)?);
txn.commit()?;
}
@@ -284,6 +285,25 @@ impl Database {
Ok(())
}
+ pub fn get_import_file_mtime(&self, path: &Path) -> Result<Option<u64>> {
+ let bytes = path.as_os_str().as_encoded_bytes();
+ let txn = self.inner.begin_read()?;
+ let table = txn.open_table(T_IMPORT_FILE_MTIME)?;
+ if let Some(v) = table.get(bytes)? {
+ Ok(Some(v.value()))
+ } else {
+ Ok(None)
+ }
+ }
+ pub fn set_import_file_mtime(&self, path: &Path, mtime: u64) -> Result<()> {
+ let bytes = path.as_os_str().as_encoded_bytes();
+ let txn = self.inner.begin_write()?;
+ let mut table = txn.open_table(T_IMPORT_FILE_MTIME)?;
+ table.insert(bytes, mtime)?;
+ drop(table);
+ txn.commit()?;
+ Ok(())
+ }
}
pub struct NodeIndex {