diff options
| author | Nathan | 2017-07-23 12:46:34 -0400 |
|---|---|---|
| committer | Nathan | 2017-07-23 12:46:34 -0400 |
| commit | 237a0be7f0ca4d7dceca1c9e43391381593064fb (patch) | |
| tree | dd4b55cc004c5ea28d1c7d4b6687de7376470ca6 | |
| parent | d1c2572a0cb2882b2661dafac0631e5888144dce (diff) | |
| download | podcast-237a0be7f0ca4d7dceca1c9e43391381593064fb.tar.bz2 | |
Cleanup and error handling
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/actions.rs | 9 | ||||
| -rw-r--r-- | src/utils.rs | 16 |
3 files changed, 14 insertions, 13 deletions
@@ -1,6 +1,6 @@ [package] name = "podcast" -version = "0.2.4" +version = "0.2.5" authors = ["njaremko <njaremko@gmail.com>"] description = "A command line podcast player" license = "GPL-3.0" diff --git a/src/actions.rs b/src/actions.rs index 2f90205..120d58b 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -72,8 +72,11 @@ pub fn download_range(state: &State, p_search: &str, e_search: &str) { for subscription in state.subscriptions() { if re_pod.is_match(&subscription.title()) { let podcast = Podcast::from_url(&subscription.url()).unwrap(); - let episodes_to_download = parse_download_episodes(e_search); - podcast.download_specific(episodes_to_download); + match parse_download_episodes(e_search) { + Ok(episodes_to_download) => podcast.download_specific(episodes_to_download), + Err(err) => eprintln!("{}", err), + } + return; } } } @@ -87,7 +90,7 @@ pub fn download_episode(state: &State, p_search: &str, e_search: &str) { let podcast = Podcast::from_url(&subscription.url()).unwrap(); let episodes = podcast.episodes(); if let Err(err) = episodes[episodes.len() - ep_num].download(podcast.title()) { - println!("{}", err); + eprintln!("{}", err); } } } diff --git a/src/utils.rs b/src/utils.rs index 5a6342b..a3d7260 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -2,6 +2,7 @@ use std::collections::BTreeSet; use std::env; use std::fs; use std::path::PathBuf; +use std::num::ParseIntError; pub fn already_downloaded(dir: &str) -> BTreeSet<String> { @@ -15,12 +16,9 @@ pub fn already_downloaded(dir: &str) -> BTreeSet<String> { if let Ok(entry) = entry { match entry.file_name().into_string() { Ok(val) => { - // TODO There has to be a better way to do this...later - result.insert(String::from( - val.trim_right_matches(".mp3") - .trim_right_matches(".m4a") - .trim_right_matches(".ogg"), - )); + let name = String::from(val); + let index = name.find('.').unwrap(); + result.insert(String::from(&name[0..index])); } Err(_) => { println!( @@ -62,7 +60,7 @@ pub fn get_sub_file() -> PathBuf { } } -pub fn parse_download_episodes(e_search: &str) -> Vec<usize> { +pub fn parse_download_episodes(e_search: &str) -> Result<Vec<usize>, ParseIntError> { let input = String::from(e_search); let mut ranges = Vec::<(usize, usize)>::new(); let mut elements = Vec::<usize>::new(); @@ -75,7 +73,7 @@ pub fn parse_download_episodes(e_search: &str) -> Vec<usize> { .collect(); ranges.push((range[0], range[1])); } else { - elements.push(elem.parse::<usize>().unwrap()); + elements.push(elem.parse::<usize>()?); } } @@ -86,5 +84,5 @@ pub fn parse_download_episodes(e_search: &str) -> Vec<usize> { } } elements.dedup(); - elements + Ok(elements) } |
