diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/actions.rs | 9 | ||||
| -rw-r--r-- | src/utils.rs | 16 |
2 files changed, 13 insertions, 12 deletions
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) } |
