diff options
| author | Nathan Jaremko | 2019-02-24 16:52:01 -0500 |
|---|---|---|
| committer | Nathan Jaremko | 2019-02-24 17:53:19 -0500 |
| commit | 22e617eec8e2d8da36788ae40fb53c2ed2ebe734 (patch) | |
| tree | 99ecbf8a7df65c9748b73debf9ece08ad9858315 /src/match_handler.rs | |
| parent | e54af75fa1fe7f5e9da3bd858058ab491efea77a (diff) | |
| download | podcast-0.8.0.tar.bz2 | |
Improve code0.8.0
Diffstat (limited to 'src/match_handler.rs')
| -rw-r--r-- | src/match_handler.rs | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/match_handler.rs b/src/match_handler.rs new file mode 100644 index 0000000..3fd7c6a --- /dev/null +++ b/src/match_handler.rs @@ -0,0 +1,103 @@ +use clap::ArgMatches; + +use crate::actions::*; +use crate::errors::*; +use crate::structs::*; + +pub fn handle_matches( + version: &str, + state: &mut State, + config: &Config, + matches: &ArgMatches, +) -> Result<()> { + match matches.subcommand_name() { + Some("download") => { + let download_matches = matches + .subcommand_matches("download") + .chain_err(|| "unable to find subcommand matches")?; + let podcast = download_matches + .value_of("PODCAST") + .chain_err(|| "unable to find subcommand match")?; + match download_matches.value_of("EPISODE") { + Some(ep) => { + if String::from(ep).contains(|c| c == '-' || c == ',') { + download_range(&state, podcast, ep)? + } else if download_matches.occurrences_of("name") > 0 { + download_episode_by_name( + &state, + podcast, + ep, + download_matches.occurrences_of("all") > 0, + )? + } else { + download_episode_by_num(&state, podcast, ep)? + } + } + None => download_all(&state, podcast)?, + } + } + Some("ls") | Some("list") => { + let list_matches = matches + .subcommand_matches("ls") + .or_else(|| matches.subcommand_matches("list")) + .chain_err(|| "unable to find subcommand matches")?; + match list_matches.value_of("PODCAST") { + Some(regex) => list_episodes(regex)?, + None => list_subscriptions(&state)?, + } + } + Some("play") => { + let play_matches = matches + .subcommand_matches("play") + .chain_err(|| "unable to find subcommand matches")?; + let podcast = play_matches + .value_of("PODCAST") + .chain_err(|| "unable to find subcommand match")?; + match play_matches.value_of("EPISODE") { + Some(episode) => { + if play_matches.occurrences_of("name") > 0 { + play_episode_by_name(&state, podcast, episode)? + } else { + play_episode_by_num(&state, podcast, episode)? + } + } + None => play_latest(&state, podcast)?, + } + } + Some("sub") | Some("subscribe") => { + let subscribe_matches = matches + .subcommand_matches("subscribe") + .chain_err(|| "unable to find subcommand matches")?; + let url = subscribe_matches + .value_of("URL") + .chain_err(|| "unable to find subcommand match")?; + state.subscribe(url).chain_err(|| "unable to subscribe")?; + if subscribe_matches.occurrences_of("download") > 0 { + download_rss(&config, url)?; + } else { + subscribe_rss(url)?; + } + } + Some("search") => println!("This feature is coming soon..."), + Some("rm") => { + let rm_matches = matches + .subcommand_matches("rm") + .chain_err(|| "unable to find subcommand matches")?; + let regex = rm_matches.value_of("PODCAST").chain_err(|| "")?; + remove_podcast(state, regex)? + } + Some("completion") => { + let matches = matches + .subcommand_matches("completion") + .chain_err(|| "unable to find subcommand matches")?; + match matches.value_of("SHELL") { + Some(shell) => print_completion(shell), + None => print_completion(""), + } + } + Some("refresh") => update_rss(state), + Some("update") => check_for_update(version)?, + _ => (), + }; + Ok(()) +} |
