1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
use clap::{App, ArgMatches};
use std::env;
use std::path::Path;
use crate::actions::*;
use crate::download;
use crate::errors::*;
use crate::playback;
use crate::structs::*;
pub fn download(state: &mut State, matches: &ArgMatches) -> Result<()> {
let download_matches = matches.subcommand_matches("download").unwrap();
let podcast = download_matches.value_of("PODCAST").unwrap();
match download_matches.value_of("EPISODE") {
Some(ep) => {
if String::from(ep).contains(|c| c == '-' || c == ',') {
download::download_range(&state, podcast, ep)?
} else if download_matches.occurrences_of("name") > 0 {
download::download_episode_by_name(
&state,
podcast,
ep,
download_matches.occurrences_of("all") > 0,
)?
} else {
download::download_episode_by_num(&state, podcast, ep)?
}
}
None => download::download_all(&state, podcast)?,
}
Ok(())
}
pub fn list(state: &mut State, matches: &ArgMatches) -> Result<()> {
let list_matches = matches
.subcommand_matches("ls")
.or_else(|| matches.subcommand_matches("list"))
.unwrap();
match list_matches.value_of("PODCAST") {
Some(regex) => list_episodes(regex)?,
None => list_subscriptions(&state)?,
}
Ok(())
}
pub fn play(state: &mut State, matches: &ArgMatches) -> Result<()> {
let play_matches = matches.subcommand_matches("play").unwrap();
let podcast = play_matches.value_of("PODCAST").unwrap();
match play_matches.value_of("EPISODE") {
Some(episode) => {
if play_matches.occurrences_of("name") > 0 {
playback::play_episode_by_name(&state, podcast, episode)?
} else {
playback::play_episode_by_num(&state, podcast, episode)?
}
}
None => playback::play_latest(&state, podcast)?,
}
Ok(())
}
pub fn subscribe(state: &mut State, config: &Config, matches: &ArgMatches) -> Result<()> {
let subscribe_matches = matches
.subcommand_matches("sub")
.or_else(|| matches.subcommand_matches("subscribe"))
.unwrap();
let url = subscribe_matches.value_of("URL").unwrap();
state.subscribe(url)?;
download::download_rss(&config, url)?;
Ok(())
}
pub fn remove(state: &mut State, matches: &ArgMatches) -> Result<()> {
let rm_matches = matches.subcommand_matches("rm").unwrap();
let regex = rm_matches.value_of("PODCAST").unwrap();
remove_podcast(state, regex)?;
Ok(())
}
pub fn complete(app: &mut App, matches: &ArgMatches) -> Result<()> {
let matches = matches.subcommand_matches("completion").unwrap();
match matches.value_of("SHELL") {
Some(shell) => print_completion(app, shell),
None => {
let shell_path_env = env::var("SHELL");
if let Ok(p) = shell_path_env {
let shell_path = Path::new(&p);
if let Some(shell) = shell_path.file_name() {
print_completion(app, shell.to_str().unwrap())
}
}
}
}
Ok(())
}
|