mirror of
https://github.com/ankitects/anki.git
synced 2025-09-24 08:46:37 -04:00
mark deletions in media DB when files are deleted
This commit is contained in:
parent
1b0e8485fd
commit
23483b0a57
3 changed files with 25 additions and 5 deletions
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<S>(&self, ctx: &mut MediaDatabaseContext, filenames: &[S]) -> Result<()>
|
||||
where
|
||||
S: AsRef<str> + 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<F>(&self, progress: F, endpoint: &str, hkey: &str) -> Result<()>
|
||||
where
|
||||
|
|
|
@ -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()?;
|
||||
|
||||
|
|
Loading…
Reference in a new issue