82 lines
2.4 KiB
Rust
82 lines
2.4 KiB
Rust
use rayon::prelude::*;
|
|
|
|
use errors::*;
|
|
use dbqueries;
|
|
use index_feed::Database;
|
|
use models::Episode;
|
|
use chrono::prelude::*;
|
|
|
|
use std::path::Path;
|
|
use std::fs;
|
|
|
|
// TODO: Write unit test.
|
|
pub fn download_checker(db: Database) -> Result<()> {
|
|
let mut episodes = {
|
|
let tempdb = db.lock().unwrap();
|
|
dbqueries::get_downloaded_episodes(&tempdb)?
|
|
};
|
|
|
|
episodes.par_iter_mut().for_each(|ep| {
|
|
if ep.local_uri().is_some() {
|
|
if !Path::new(ep.local_uri().unwrap()).exists() {
|
|
ep.set_local_uri(None);
|
|
let res = ep.save(&db.clone());
|
|
if let Err(err) = res {
|
|
error!("Error while trying to update episode: {:#?}", ep);
|
|
error!("Error: {}", err);
|
|
};
|
|
}
|
|
}
|
|
});
|
|
|
|
Ok(())
|
|
}
|
|
|
|
// TODO: Write unit test.
|
|
pub fn watched_cleaner(db: &Database) -> Result<()> {
|
|
let mut episodes = {
|
|
let tempdb = db.lock().unwrap();
|
|
dbqueries::get_watched_episodes(&tempdb)?
|
|
};
|
|
|
|
let now_utc = Utc::now().timestamp() as i32;
|
|
episodes.par_iter_mut().for_each(|mut ep| {
|
|
if ep.local_uri().is_some() && ep.watched().is_some() {
|
|
let watched = ep.watched().unwrap().clone();
|
|
// TODO: expose a config and a user set option.
|
|
let limit = watched + 172_800; // add 2days in seconds
|
|
if now_utc > limit {
|
|
let e = delete_local_content(db, &mut ep);
|
|
if let Err(err) = e {
|
|
error!("Error while trying to delete file: {:?}", ep.local_uri());
|
|
error!("Error: {}", err);
|
|
};
|
|
}
|
|
}
|
|
});
|
|
Ok(())
|
|
}
|
|
|
|
// TODO: Write unit test.
|
|
pub fn delete_local_content(db: &Database, ep: &mut Episode) -> Result<()> {
|
|
if ep.local_uri().is_some() {
|
|
let uri = ep.local_uri().unwrap().to_owned();
|
|
if Path::new(&uri).exists() {
|
|
let res = fs::remove_file(&uri);
|
|
if res.is_ok() {
|
|
ep.set_local_uri(None);
|
|
ep.save(db)?;
|
|
} else {
|
|
error!("Error while trying to delete file: {}", uri);
|
|
error!("Error: {}", res.unwrap_err());
|
|
};
|
|
}
|
|
} else {
|
|
error!(
|
|
"Something went wrong evaluating the following path: {:?}",
|
|
ep.local_uri(),
|
|
);
|
|
}
|
|
Ok(())
|
|
}
|