diff --git a/src/filesystem.rs b/src/filesystem.rs index 717de1c..d052e7c 100644 --- a/src/filesystem.rs +++ b/src/filesystem.rs @@ -48,7 +48,11 @@ fn initialize_types(connection: &UpEndConnection) -> Result<()> { Ok(()) } -pub async fn rescan_vault(db: Arc, job_container: Arc>) { +pub async fn rescan_vault( + db: Arc, + job_container: Arc>, + initial: bool, +) { let job_id = job_container .write() .unwrap() @@ -57,7 +61,8 @@ pub async fn rescan_vault(db: Arc, job_container: Arc>( db: D, job_container: Arc>, job_id: JobId, + initial: bool, ) -> Result> { let start = Instant::now(); info!("Vault rescan started."); @@ -111,9 +117,12 @@ fn _rescan_vault>( initialize_types(&connection)?; // Disable syncing in SQLite for the duration of the import - debug!("Disabling SQLite synchronous mode"); - connection.execute("PRAGMA synchronous = OFF;")?; - let _guard = PragmaSynchronousGuard(&connection); + let mut _guard: Option = None; + if initial { + debug!("Disabling SQLite synchronous mode"); + connection.execute("PRAGMA synchronous = OFF;")?; + _guard = Some(PragmaSynchronousGuard(&connection)); + } // Walk through the vault, find all paths debug!("Traversing vault directory"); @@ -418,7 +427,7 @@ mod test { .unwrap(); // Initial scan - let rescan_result = _rescan_vault(&open_result.db, job_container.clone(), job_id); + let rescan_result = _rescan_vault(&open_result.db, job_container.clone(), job_id, true); assert!(rescan_result.is_ok()); let rescan_result = rescan_result.unwrap(); @@ -429,7 +438,7 @@ mod test { // Modification-less rescan - let rescan_result = _rescan_vault(&open_result.db, job_container.clone(), job_id); + let rescan_result = _rescan_vault(&open_result.db, job_container.clone(), job_id, false); assert!(rescan_result.is_ok()); let rescan_result = rescan_result.unwrap(); @@ -442,7 +451,7 @@ mod test { std::fs::remove_file(temp_dir.path().join("hello-world.txt")).unwrap(); - let rescan_result = _rescan_vault(&open_result.db, job_container, job_id); + let rescan_result = _rescan_vault(&open_result.db, job_container, job_id, false); assert!(rescan_result.is_ok()); let rescan_result = rescan_result.unwrap(); diff --git a/src/main.rs b/src/main.rs index 69b1aec..eab28cb 100644 --- a/src/main.rs +++ b/src/main.rs @@ -194,7 +194,7 @@ fn main() -> Result<()> { if !matches.is_present("NO_INITIAL_UPDATE") { info!("Running initial update..."); - actix::spawn(filesystem::rescan_vault(upend, job_container)); + actix::spawn(filesystem::rescan_vault(upend, job_container, true)); } #[cfg(feature = "desktop")] diff --git a/src/routes.rs b/src/routes.rs index fbaa275..4212460 100644 --- a/src/routes.rs +++ b/src/routes.rs @@ -378,6 +378,7 @@ pub async fn api_refresh(state: web::Data) -> Result actix::spawn(crate::filesystem::rescan_vault( state.upend.clone(), state.job_container.clone(), + false, )); Ok(HttpResponse::Ok().finish()) }