dlmanager: minor cleanup.

This commit is contained in:
Jordan Petridis 2018-04-04 21:36:23 +03:00
parent ef655ef5e0
commit 370ba2d461
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 16 additions and 21 deletions

View File

@ -78,38 +78,32 @@ lazy_static! {
static ref DLPOOL: rayon::ThreadPool = rayon::ThreadPoolBuilder::new().build().unwrap(); static ref DLPOOL: rayon::ThreadPool = rayon::ThreadPoolBuilder::new().build().unwrap();
} }
pub fn add(id: i32, directory: &str, sender: Sender<Action>) -> Result<(), Error> { pub fn add(id: i32, directory: String, sender: Sender<Action>) -> Result<(), Error> {
// Create a new `Progress` struct to keep track of dl progress. // Create a new `Progress` struct to keep track of dl progress.
let prog = Arc::new(Mutex::new(Progress::default())); let prog = Arc::new(Mutex::new(Progress::default()));
{ match ACTIVE_DOWNLOADS.write() {
let mut m = ACTIVE_DOWNLOADS Ok(mut guard) => guard.insert(id, prog.clone()),
.write() Err(err) => return Err(format_err!("ActiveDonwloads: {}.", err)),
.map_err(|_| format_err!("Failed to get a lock on the mutex."))?; };
m.insert(id, prog.clone());
}
let dir = directory.to_owned();
DLPOOL.spawn(move || { DLPOOL.spawn(move || {
if let Ok(episode) = dbqueries::get_episode_from_rowid(id) { if let Ok(episode) = dbqueries::get_episode_from_rowid(id) {
let pid = episode.podcast_id(); let pid = episode.podcast_id();
let id = episode.rowid(); let id = episode.rowid();
if let Err(err) = get_episode(&mut episode.into(), dir.as_str(), Some(prog)) { if let Err(err) = get_episode(&mut episode.into(), directory.as_str(), Some(prog)) {
error!("Error while trying to download an episode"); error!("Error while trying to download an episode");
error!("Error: {}", err); error!("Error: {}", err);
} }
{ if let Ok(mut m) = ACTIVE_DOWNLOADS.write() {
if let Ok(mut m) = ACTIVE_DOWNLOADS.write() { let foo = m.remove(&id);
info!("Removed: {:?}", m.remove(&id)); debug!("Removed: {:?}", foo);
}
} }
// { // if let Ok(m) = ACTIVE_DOWNLOADS.read() {
// if let Ok(m) = ACTIVE_DOWNLOADS.read() { // debug!("ACTIVE DOWNLOADS: {:#?}", m);
// debug!("ACTIVE DOWNLOADS: {:#?}", m);
// }
// } // }
sender sender
@ -163,13 +157,14 @@ mod tests {
let (sender, _rx) = channel(); let (sender, _rx) = channel();
let download_fold = get_download_folder(&pd.title()).unwrap(); let download_fold = get_download_folder(&pd.title()).unwrap();
add(episode.rowid(), download_fold.as_str(), sender).unwrap(); let fold2 = download_fold.clone();
add(episode.rowid(), download_fold, sender).unwrap();
assert_eq!(ACTIVE_DOWNLOADS.read().unwrap().len(), 1); assert_eq!(ACTIVE_DOWNLOADS.read().unwrap().len(), 1);
// Give it soem time to download the file // Give it soem time to download the file
thread::sleep(time::Duration::from_secs(20)); thread::sleep(time::Duration::from_secs(20));
let final_path = format!("{}/{}.mp3", &download_fold, episode.rowid()); let final_path = format!("{}/{}.mp3", &fold2, episode.rowid());
assert!(Path::new(&final_path).exists()); assert!(Path::new(&final_path).exists());
fs::remove_file(final_path).unwrap(); fs::remove_file(final_path).unwrap();
} }

View File

@ -195,10 +195,10 @@ impl EpisodeWidget {
#[inline] #[inline]
fn on_download_clicked(ep: &EpisodeWidgetQuery, sender: Sender<Action>) -> Result<(), Error> { fn on_download_clicked(ep: &EpisodeWidgetQuery, sender: Sender<Action>) -> Result<(), Error> {
let pd = dbqueries::get_podcast_from_id(ep.podcast_id())?; let pd = dbqueries::get_podcast_from_id(ep.podcast_id())?;
let download_fold = get_download_folder(&pd.title().to_owned())?; let download_fold = get_download_folder(&pd.title())?;
// Start a new download. // Start a new download.
manager::add(ep.rowid(), &download_fold, sender.clone())?; manager::add(ep.rowid(), download_fold, sender.clone())?;
// Update Views // Update Views
sender.send(Action::RefreshEpisodesView)?; sender.send(Action::RefreshEpisodesView)?;