diff --git a/rslib/src/backend.rs b/rslib/src/backend.rs index 8a84ce183..cc2b4bcea 100644 --- a/rslib/src/backend.rs +++ b/rslib/src/backend.rs @@ -7,7 +7,6 @@ use crate::backend_proto::{Empty, RenderedTemplateReplacement, SyncMediaIn}; use crate::err::{AnkiError, NetworkErrorKind, Result, SyncErrorKind}; use crate::latex::{extract_latex, ExtractedLatex}; use crate::media::check::MediaChecker; -use crate::media::files::remove_files; use crate::media::sync::MediaSyncProgress; use crate::media::MediaManager; use crate::sched::{local_minutes_west_for_stamp, sched_timing_today}; @@ -368,7 +367,9 @@ impl Backend { } fn remove_media_files(&self, fnames: &[String]) -> Result<()> { - remove_files(&self.media_folder, fnames) + let mgr = MediaManager::new(&self.media_folder, &self.media_db)?; + let mut ctx = mgr.dbctx(); + mgr.remove_files(&mut ctx, fnames) } } diff --git a/rslib/src/media/mod.rs b/rslib/src/media/mod.rs index 51eaab001..bffa82f15 100644 --- a/rslib/src/media/mod.rs +++ b/rslib/src/media/mod.rs @@ -3,7 +3,7 @@ use crate::err::Result; use crate::media::database::{open_or_create, MediaDatabaseContext, MediaEntry}; -use crate::media::files::{add_data_to_folder_uniquely, mtime_as_i64, sha1_of_data}; +use crate::media::files::{add_data_to_folder_uniquely, mtime_as_i64, remove_files, sha1_of_data}; use crate::media::sync::{MediaSyncProgress, MediaSyncer}; use rusqlite::Connection; use std::borrow::Cow; @@ -91,6 +91,25 @@ impl MediaManager { Ok(chosen_fname) } + pub fn remove_files(&self, ctx: &mut MediaDatabaseContext, filenames: &[S]) -> Result<()> + where + S: AsRef + std::fmt::Debug, + { + remove_files(&self.media_folder, &filenames)?; + ctx.transact(|ctx| { + for fname in filenames { + if let Some(mut entry) = ctx.get_entry(fname.as_ref())? { + entry.sha1 = None; + entry.mtime = 0; + entry.sync_required = true; + ctx.set_entry(&entry)?; + } + } + + Ok(()) + }) + } + /// Sync media. pub async fn sync_media(&self, progress: F, endpoint: &str, hkey: &str) -> Result<()> where diff --git a/rslib/src/media/sync.rs b/rslib/src/media/sync.rs index 19ec0f144..f12a9bbee 100644 --- a/rslib/src/media/sync.rs +++ b/rslib/src/media/sync.rs @@ -5,7 +5,7 @@ use crate::err::{AnkiError, Result, SyncErrorKind}; use crate::media::changetracker::ChangeTracker; use crate::media::database::{MediaDatabaseContext, MediaDatabaseMetadata, MediaEntry}; use crate::media::files::{ - add_file_from_ankiweb, data_for_file, mtime_as_i64, normalize_filename, remove_files, AddedFile, + add_file_from_ankiweb, data_for_file, mtime_as_i64, normalize_filename, AddedFile, }; use crate::media::MediaManager; use crate::version; @@ -259,7 +259,7 @@ where determine_required_changes(&mut self.ctx, &batch)?; // file removal - remove_files(self.mgr.media_folder.as_path(), to_delete.as_slice())?; + self.mgr.remove_files(&mut self.ctx, to_delete.as_slice())?; self.progress.downloaded_deletions += to_delete.len(); self.maybe_fire_progress_cb()?;