From 801c5fcc405a930d8666bd7df74ca4a148129bf5 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sat, 29 Feb 2020 14:45:16 +1000 Subject: [PATCH] don't require a media scan after media deleted inside Anki --- rslib/src/media/mod.rs | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/rslib/src/media/mod.rs b/rslib/src/media/mod.rs index bffa82f15..1ed5d52f2 100644 --- a/rslib/src/media/mod.rs +++ b/rslib/src/media/mod.rs @@ -95,7 +95,12 @@ impl MediaManager { where S: AsRef + std::fmt::Debug, { + let pre_remove_folder_mtime = mtime_as_i64(&self.media_folder)?; + remove_files(&self.media_folder, &filenames)?; + + let post_remove_folder_mtime = mtime_as_i64(&self.media_folder)?; + ctx.transact(|ctx| { for fname in filenames { if let Some(mut entry) = ctx.get_entry(fname.as_ref())? { @@ -106,16 +111,33 @@ impl MediaManager { } } + let mut meta = ctx.get_meta()?; + if meta.folder_mtime == pre_remove_folder_mtime { + // if media db was in sync with folder prior to this add, + // we can keep it in sync + meta.folder_mtime = post_remove_folder_mtime; + ctx.set_meta(&meta)?; + } else { + // otherwise, leave it alone so that other pending changes + // get picked up later + } + Ok(()) }) } /// Sync media. - pub async fn sync_media(&self, progress: F, endpoint: &str, hkey: &str) -> Result<()> + pub async fn sync_media<'a, F>( + &'a self, + progress: F, + endpoint: &'a str, + hkey: &'a str, + log: Logger, + ) -> Result<()> where F: Fn(&MediaSyncProgress) -> bool, { - let mut syncer = MediaSyncer::new(self, progress, endpoint); + let mut syncer = MediaSyncer::new(self, progress, endpoint, log); syncer.sync(hkey).await }