hammond-gtk::manager: Switch the add function to return a Result<(), Error>.

This commit is contained in:
Jordan Petridis 2018-02-06 22:03:17 +02:00
parent ab519a54d3
commit 1c84f0d721
No known key found for this signature in database
GPG Key ID: CEABAD9F5683B9A6
2 changed files with 16 additions and 12 deletions

View File

@ -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<Action>) {
pub fn add(id: i32, directory: &str, sender: Sender<Action>) -> 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<Action>) {
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<Action>) {
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

View File

@ -269,7 +269,7 @@ fn on_download_clicked(ep: &EpisodeWidgetQuery, sender: Sender<Action>) -> 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)?;