Replaced played_cleanup function with a function that accepts a closure.
This commit is contained in:
parent
fdf3908494
commit
be2d707391
@ -13,6 +13,7 @@ use xdg_dirs::DL_DIR;
|
|||||||
|
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// Scan downloaded `episode` entries that might have broken `local_uri`s and
|
/// Scan downloaded `episode` entries that might have broken `local_uri`s and
|
||||||
/// set them to `None`.
|
/// set them to `None`.
|
||||||
@ -38,26 +39,31 @@ fn download_checker() -> Result<(), DataError> {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Delete watched `episodes` that have exceded their liftime after played.
|
fn delete_expired_played_episodes() -> Result<(), DataError> {
|
||||||
fn played_cleaner() -> Result<(), DataError> {
|
let expiry = Utc::now().timestamp() as i32;
|
||||||
|
|
||||||
|
expiry -= 172_800;
|
||||||
|
|
||||||
|
delete_played_episodes(|ep| ep.played().is_some() && ep.played().unwrap() > expiry)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn delete_all_played_episodes() -> Result<(), DataError> {
|
||||||
|
delete_played_episodes(|ep| ep.played().is_some())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn delete_played_episodes<F>(filter: F) -> Result<(), DataError> where F: FnOnce(&EpisodeCleanerQuery) -> bool + Send + Sync {
|
||||||
let mut episodes = dbqueries::get_played_cleaner_episodes()?;
|
let mut episodes = dbqueries::get_played_cleaner_episodes()?;
|
||||||
|
|
||||||
let now_utc = Utc::now().timestamp() as i32;
|
|
||||||
episodes
|
episodes
|
||||||
.par_iter_mut()
|
.par_iter_mut()
|
||||||
.filter(|ep| ep.local_uri().is_some() && ep.played().is_some())
|
.filter(|ep| ep.local_uri().is_some() && filter(ep))
|
||||||
.for_each(|ep| {
|
.for_each(|ep| {
|
||||||
// TODO: expose a config and a user set option.
|
if let Err(err) = delete_local_content(ep) {
|
||||||
// Chnage the test too when exposed
|
error!("Error while trying to delete file: {:?}", ep.local_uri());
|
||||||
let limit = ep.played().unwrap() + 172_800; // add 2days in seconds
|
error!("{}", err);
|
||||||
if now_utc > limit {
|
} else {
|
||||||
if let Err(err) = delete_local_content(ep) {
|
info!("Episode {:?} was deleted succesfully.", ep.local_uri());
|
||||||
error!("Error while trying to delete file: {:?}", ep.local_uri());
|
};
|
||||||
error!("{}", err);
|
|
||||||
} else {
|
|
||||||
info!("Episode {:?} was deleted succesfully.", ep.local_uri());
|
|
||||||
};
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -95,7 +101,7 @@ fn delete_local_content(ep: &mut EpisodeCleanerQuery) -> Result<(), DataError> {
|
|||||||
pub fn checkup() -> Result<(), DataError> {
|
pub fn checkup() -> Result<(), DataError> {
|
||||||
info!("Running database checks.");
|
info!("Running database checks.");
|
||||||
download_checker()?;
|
download_checker()?;
|
||||||
played_cleaner()?;
|
delete_expired_played_episodes()?;
|
||||||
info!("Checks completed.");
|
info!("Checks completed.");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -258,37 +264,49 @@ mod tests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_played_cleaner_expired() {
|
fn test_delete_expired_played_episodes_some() {
|
||||||
let _tmp_dir = helper_db();
|
let _tmp_dir = helper_db();
|
||||||
let mut episode = dbqueries::get_episode_from_pk("foo_bar", 0).unwrap();
|
let mut episode = dbqueries::get_episode_from_pk("foo_bar", 0).unwrap();
|
||||||
let now_utc = Utc::now().timestamp() as i32;
|
let now_utc = Utc::now().timestamp() as i32;
|
||||||
// let limit = now_utc - 172_800;
|
|
||||||
let epoch = now_utc - 200_000;
|
let epoch = now_utc - 200_000;
|
||||||
episode.set_played(Some(epoch));
|
episode.set_played(Some(epoch));
|
||||||
episode.save().unwrap();
|
episode.save().unwrap();
|
||||||
let valid_path = episode.local_uri().unwrap().to_owned();
|
let valid_path = episode.local_uri().unwrap().to_owned();
|
||||||
|
|
||||||
// This should delete the file
|
// This should delete the file
|
||||||
played_cleaner().unwrap();
|
delete_expired_played_episodes().unwrap();
|
||||||
assert_eq!(Path::new(&valid_path).exists(), false);
|
assert_eq!(Path::new(&valid_path).exists(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_played_cleaner_none() {
|
fn test_delete_expired_played_episodes_none() {
|
||||||
let _tmp_dir = helper_db();
|
let _tmp_dir = helper_db();
|
||||||
let mut episode = dbqueries::get_episode_from_pk("foo_bar", 0).unwrap();
|
let mut episode = dbqueries::get_episode_from_pk("foo_bar", 0).unwrap();
|
||||||
let now_utc = Utc::now().timestamp() as i32;
|
let now_utc = Utc::now().timestamp() as i32;
|
||||||
// limit = 172_800;
|
|
||||||
let epoch = now_utc - 20_000;
|
let epoch = now_utc - 20_000;
|
||||||
episode.set_played(Some(epoch));
|
episode.set_played(Some(epoch));
|
||||||
episode.save().unwrap();
|
episode.save().unwrap();
|
||||||
let valid_path = episode.local_uri().unwrap().to_owned();
|
let valid_path = episode.local_uri().unwrap().to_owned();
|
||||||
|
|
||||||
// This should not delete the file
|
// This should not delete the file
|
||||||
played_cleaner().unwrap();
|
delete_expired_played_episodes().unwrap();
|
||||||
assert_eq!(Path::new(&valid_path).exists(), true);
|
assert_eq!(Path::new(&valid_path).exists(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_delete_all_played_episodes() {
|
||||||
|
let _tmp_dir = helper_db();
|
||||||
|
let mut episode = dbqueries::get_episode_from_pk("foo_bar", 0).unwrap();
|
||||||
|
let now_utc = Utc::now().timestamp() as i32;
|
||||||
|
episode.set_played(Some(now_utc));
|
||||||
|
episode.save().unwrap();
|
||||||
|
let valid_path = episode.local_uri().unwrap().to_owned();
|
||||||
|
|
||||||
|
// This should delete the file
|
||||||
|
delete_all_played_episodes().unwrap();
|
||||||
|
assert_eq!(Path::new(&valid_path).exists(), false);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_url_cleaner() {
|
fn test_url_cleaner() {
|
||||||
let good_url = "http://traffic.megaphone.fm/FL8608731318.mp3";
|
let good_url = "http://traffic.megaphone.fm/FL8608731318.mp3";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user