mirror of
https://github.com/ankitects/anki.git
synced 2025-09-19 06:22:22 -04:00
expire media trash after a week
This commit is contained in:
parent
e9f51a694c
commit
314e643140
2 changed files with 34 additions and 3 deletions
|
@ -4,12 +4,12 @@
|
||||||
use crate::err::{AnkiError, Result};
|
use crate::err::{AnkiError, Result};
|
||||||
use crate::media::database::MediaDatabaseContext;
|
use crate::media::database::MediaDatabaseContext;
|
||||||
use crate::media::files::{
|
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 crate::media::MediaManager;
|
||||||
use coarsetime::Instant;
|
use coarsetime::Instant;
|
||||||
use log::debug;
|
use log::debug;
|
||||||
use std::borrow::Cow;
|
use std::{borrow::Cow, fs, time};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq)]
|
#[derive(Debug, PartialEq)]
|
||||||
pub struct MediaCheckOutput {
|
pub struct MediaCheckOutput {
|
||||||
|
@ -51,6 +51,8 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn check(&mut self) -> Result<MediaCheckOutput> {
|
pub fn check(&mut self) -> Result<MediaCheckOutput> {
|
||||||
|
self.expire_old_trash()?;
|
||||||
|
|
||||||
// loop through on-disk files
|
// loop through on-disk files
|
||||||
let mut dirs = vec![];
|
let mut dirs = vec![];
|
||||||
let mut oversize = vec![];
|
let mut oversize = vec![];
|
||||||
|
@ -151,6 +153,35 @@ where
|
||||||
self.progress_updated = now;
|
self.progress_updated = now;
|
||||||
self.fire_progress_cb()
|
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)]
|
#[cfg(test)]
|
||||||
|
|
|
@ -302,7 +302,7 @@ where
|
||||||
Ok(())
|
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");
|
let trash_folder = media_folder.with_file_name("media.trash");
|
||||||
match fs::create_dir(&trash_folder) {
|
match fs::create_dir(&trash_folder) {
|
||||||
Ok(()) => Ok(trash_folder),
|
Ok(()) => Ok(trash_folder),
|
||||||
|
|
Loading…
Reference in a new issue