diff options
| author | Nathan | 2017-07-22 18:03:48 -0400 | 
|---|---|---|
| committer | Nathan | 2017-07-22 18:03:48 -0400 | 
| commit | 2644d002b80dad81672674bf8825a2a799593896 (patch) | |
| tree | bfa659f3c21a0a6564998aede0c33be95b36086b /src/utils.rs | |
| parent | 81324bf762067b1ed257e506c2ce88421387afd8 (diff) | |
| download | podcast-2644d002b80dad81672674bf8825a2a799593896.tar.bz2 | |
Fix parsing of ranges for downloads
Diffstat (limited to 'src/utils.rs')
| -rw-r--r-- | src/utils.rs | 41 | 
1 files changed, 38 insertions, 3 deletions
| diff --git a/src/utils.rs b/src/utils.rs index b2c590a..02c9983 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -15,10 +15,18 @@ pub fn already_downloaded(dir: &str) -> BTreeSet<String> {              if let Ok(entry) = entry {                  match entry.file_name().into_string() {                      Ok(val) => { -                        result.insert(String::from(val.trim_right_matches(".mp3"))); +                        // 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"), +                        ));                      } -                    Err(err) => { -                        println!("OsString: {:?} couldn't be converted to String", err); +                    Err(_) => { +                        println!( +                            "OsString: {:?} couldn't be converted to String", +                            entry.file_name() +                        );                      }                  }              } @@ -37,3 +45,30 @@ pub fn get_podcast_dir() -> PathBuf {          }      }  } + +pub fn parse_download_episodes(e_search: &str) -> Vec<usize> { +    let input = String::from(e_search); +    let mut ranges = Vec::<(usize, usize)>::new(); +    let mut elements = Vec::<usize>::new(); +    let comma_separated: Vec<&str> = input.split(',').collect(); +    for elem in comma_separated { +        let temp = String::from(elem); +        if temp.contains("-") { +            let range: Vec<usize> = elem.split('-') +                .map(|i| i.parse::<usize>().unwrap()) +                .collect(); +            ranges.push((range[0], range[1])); +        } else { +            elements.push(elem.parse::<usize>().unwrap()); +        } +    } + +    for range in ranges { +        // Add 1 to upper range to include given episode in the download +        for num in range.0..range.1 + 1 { +            elements.push(num); +        } +    } +    elements.dedup(); +    elements +} | 
