expire media trash after a week

This commit is contained in:
Damien Elmes 2020-02-09 10:29:42 +10:00
parent e9f51a694c
commit 314e643140
2 changed files with 34 additions and 3 deletions

View file

@ -4,12 +4,12 @@
use crate::err::{AnkiError, Result};
use crate::media::database::MediaDatabaseContext;
use crate::media::files::{
data_for_file, filename_if_normalized, remove_files, MEDIA_SYNC_FILESIZE_LIMIT,
data_for_file, filename_if_normalized, remove_files, trash_folder, MEDIA_SYNC_FILESIZE_LIMIT,
};
use crate::media::MediaManager;
use coarsetime::Instant;
use log::debug;
use std::borrow::Cow;
use std::{borrow::Cow, fs, time};
#[derive(Debug, PartialEq)]
pub struct MediaCheckOutput {
@ -51,6 +51,8 @@ where
}
pub fn check(&mut self) -> Result<MediaCheckOutput> {
self.expire_old_trash()?;
// loop through on-disk files
let mut dirs = vec![];
let mut oversize = vec![];
@ -151,6 +153,35 @@ where
self.progress_updated = now;
self.fire_progress_cb()
}
fn expire_old_trash(&mut self) -> Result<()> {
let trash = trash_folder(&self.mgr.media_folder)?;
let now = time::SystemTime::now();
for dentry in trash.read_dir()? {
let dentry = dentry?;
self.checked += 1;
if self.checked % 10 == 0 {
self.maybe_fire_progress_cb()?;
}
let meta = dentry.metadata()?;
let elap_secs = now
.duration_since(meta.modified()?)
.map(|d| d.as_secs())
.unwrap_or(0);
if elap_secs >= 7 * 86_400 {
debug!(
"removing {:?} from trash, as 7 days have elapsed",
dentry.path()
);
fs::remove_file(dentry.path())?;
}
}
Ok(())
}
}
#[cfg(test)]

View file

@ -302,7 +302,7 @@ where
Ok(())
}
fn trash_folder(media_folder: &Path) -> Result<PathBuf> {
pub(super) fn trash_folder(media_folder: &Path) -> Result<PathBuf> {
let trash_folder = media_folder.with_file_name("media.trash");
match fs::create_dir(&trash_folder) {
Ok(()) => Ok(trash_folder),