From 1c84f0d7212db59647a8db162a3082f8dcef6468 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Tue, 6 Feb 2018 22:03:17 +0200 Subject: [PATCH] hammond-gtk::manager: Switch the add function to return a Result<(), Error>. --- hammond-gtk/src/manager.rs | 26 +++++++++++++++----------- hammond-gtk/src/widgets/episode.rs | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/hammond-gtk/src/manager.rs b/hammond-gtk/src/manager.rs index 5805a0d..da958d2 100644 --- a/hammond-gtk/src/manager.rs +++ b/hammond-gtk/src/manager.rs @@ -1,3 +1,5 @@ +use failure::Error; + // use hammond_data::Episode; use hammond_data::dbqueries; use hammond_downloader::downloader::{get_episode, DownloadProgress}; @@ -76,14 +78,15 @@ lazy_static! { }; } -pub fn add(id: i32, directory: &str, sender: Sender) { +pub fn add(id: i32, directory: &str, sender: Sender) -> Result<(), Error> { // Create a new `Progress` struct to keep track of dl progress. let prog = Arc::new(Mutex::new(Progress::default())); { - if let Ok(mut m) = ACTIVE_DOWNLOADS.write() { - m.insert(id, prog.clone()); - } + let mut m = ACTIVE_DOWNLOADS + .write() + .map_err(|_| format_err!("Failed to get a lock on the mutex."))?; + m.insert(id, prog.clone()); } let dir = directory.to_owned(); @@ -91,12 +94,11 @@ pub fn add(id: i32, directory: &str, sender: Sender) { if let Ok(episode) = dbqueries::get_episode_from_rowid(id) { let pid = episode.podcast_id(); let id = episode.rowid(); - get_episode(&mut episode.into(), dir.as_str(), Some(prog)) - .err() - .map(|err| { - error!("Error while trying to download an episode"); - error!("Error: {}", err); - }); + + if let Err(err) = get_episode(&mut episode.into(), dir.as_str(), Some(prog)) { + error!("Error while trying to download an episode"); + error!("Error: {}", err); + } { if let Ok(mut m) = ACTIVE_DOWNLOADS.write() { @@ -114,6 +116,8 @@ pub fn add(id: i32, directory: &str, sender: Sender) { sender.send(Action::RefreshWidgetIfSame(pid)).unwrap(); } }); + + Ok(()) } #[cfg(test)] @@ -155,7 +159,7 @@ mod tests { let (sender, _rx) = channel(); let download_fold = get_download_folder(&pd.title()).unwrap(); - add(episode.rowid(), download_fold.as_str(), sender); + add(episode.rowid(), download_fold.as_str(), sender).unwrap(); assert_eq!(ACTIVE_DOWNLOADS.read().unwrap().len(), 1); // Give it soem time to download the file diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index ba8ab7c..44bc1ff 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -269,7 +269,7 @@ fn on_download_clicked(ep: &EpisodeWidgetQuery, sender: Sender) -> Resul let download_fold = get_download_folder(&pd.title().to_owned())?; // Start a new download. - manager::add(ep.rowid(), &download_fold, sender.clone()); + manager::add(ep.rowid(), &download_fold, sender.clone())?; // Update Views sender.send(Action::RefreshEpisodesView)?;