aboutsummaryrefslogtreecommitdiffstats
path: root/crates/turtle/src/sync.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/turtle/src/sync.rs')
-rw-r--r--crates/turtle/src/sync.rs34
1 files changed, 34 insertions, 0 deletions
diff --git a/crates/turtle/src/sync.rs b/crates/turtle/src/sync.rs
new file mode 100644
index 00000000..56aef615
--- /dev/null
+++ b/crates/turtle/src/sync.rs
@@ -0,0 +1,34 @@
+use eyre::{Context, Result};
+
+use crate::atuin_client::{
+ database::Database, history::store::HistoryStore, record::sqlite_store::SqliteStore,
+ settings::Settings,
+};
+use crate::atuin_common::record::RecordId;
+
+// This is the only crate that ties together all other crates.
+// Therefore, it's the only crate where functions tying together all stores can live
+
+/// Rebuild all stores after a sync
+/// Note: for history, this only does an _incremental_ sync. Hence the need to specify downloaded
+/// records.
+pub async fn build(
+ settings: &Settings,
+ store: &SqliteStore,
+ db: &dyn Database,
+ downloaded: Option<&[RecordId]>,
+) -> Result<()> {
+ let encryption_key: [u8; 32] = crate::atuin_client::encryption::load_key(settings)
+ .context("could not load encryption key")?
+ .into();
+
+ let host_id = Settings::host_id().await?;
+
+ let downloaded = downloaded.unwrap_or(&[]);
+
+ let history_store = HistoryStore::new(store.clone(), host_id, encryption_key);
+
+ history_store.incremental_build(db, downloaded).await?;
+
+ Ok(())
+}