hammond-gtk::manager: Switch the add function to return a Result<(), Error>.
This commit is contained in:
parent
ab519a54d3
commit
1c84f0d721
@ -1,3 +1,5 @@
|
|||||||
|
use failure::Error;
|
||||||
|
|
||||||
// use hammond_data::Episode;
|
// use hammond_data::Episode;
|
||||||
use hammond_data::dbqueries;
|
use hammond_data::dbqueries;
|
||||||
use hammond_downloader::downloader::{get_episode, DownloadProgress};
|
use hammond_downloader::downloader::{get_episode, DownloadProgress};
|
||||||
@ -76,27 +78,27 @@ 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.
|
// 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()));
|
||||||
|
|
||||||
{
|
{
|
||||||
if let Ok(mut m) = ACTIVE_DOWNLOADS.write() {
|
let mut m = ACTIVE_DOWNLOADS
|
||||||
|
.write()
|
||||||
|
.map_err(|_| format_err!("Failed to get a lock on the mutex."))?;
|
||||||
m.insert(id, prog.clone());
|
m.insert(id, prog.clone());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
let dir = directory.to_owned();
|
let dir = directory.to_owned();
|
||||||
thread::spawn(move || {
|
thread::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();
|
||||||
get_episode(&mut episode.into(), dir.as_str(), Some(prog))
|
|
||||||
.err()
|
if let Err(err) = get_episode(&mut episode.into(), dir.as_str(), Some(prog)) {
|
||||||
.map(|err| {
|
|
||||||
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() {
|
||||||
@ -114,6 +116,8 @@ pub fn add(id: i32, directory: &str, sender: Sender<Action>) {
|
|||||||
sender.send(Action::RefreshWidgetIfSame(pid)).unwrap();
|
sender.send(Action::RefreshWidgetIfSame(pid)).unwrap();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
@ -155,7 +159,7 @@ 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);
|
add(episode.rowid(), download_fold.as_str(), 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
|
||||||
|
|||||||
@ -269,7 +269,7 @@ fn on_download_clicked(ep: &EpisodeWidgetQuery, sender: Sender<Action>) -> Resul
|
|||||||
let download_fold = get_download_folder(&pd.title().to_owned())?;
|
let download_fold = get_download_folder(&pd.title().to_owned())?;
|
||||||
|
|
||||||
// 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)?;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user