diff options
| author | njaremko | 2017-07-17 21:50:26 -0400 |
|---|---|---|
| committer | njaremko | 2017-07-17 21:50:26 -0400 |
| commit | cd83d6ecaf7d9025c3db452268cf246ae4c4aaa0 (patch) | |
| tree | 77be33df40e823b08d234b8a7d09245049b35553 | |
| parent | c981cf824f5d75423f88437361d915cb1233eb3a (diff) | |
| download | podcast-cd83d6ecaf7d9025c3db452268cf246ae4c4aaa0.tar.bz2 | |
Fix play functionality
| -rw-r--r-- | src/actions.rs | 22 | ||||
| -rw-r--r-- | src/main.rs | 2 | ||||
| -rw-r--r-- | src/structs.rs | 8 |
3 files changed, 21 insertions, 11 deletions
diff --git a/src/actions.rs b/src/actions.rs index a228b74..b8074b1 100644 --- a/src/actions.rs +++ b/src/actions.rs @@ -1,6 +1,7 @@ use regex::Regex; use structs::*; use std::process::{Command, Stdio}; +use utils::*; pub fn list_episodes(state: State, search: &str) { let re = Regex::new(&search).unwrap(); @@ -54,15 +55,24 @@ pub fn download_all(state: State, p_search: &str) { } } -pub fn stream_episode(state: State, p_search: &str, e_search: &str) { +pub fn play_episode(state: State, p_search: &str, ep_num_string: &str) { let re_pod = Regex::new(&p_search).unwrap(); - let ep_num = e_search.parse::<usize>().unwrap(); - + let ep_num = ep_num_string.parse::<usize>().unwrap(); + let mut path = get_podcast_dir(); for subscription in state.subscriptions() { if re_pod.is_match(&subscription.name) { let podcast = Podcast::from_url(&subscription.url).unwrap(); + path.push(podcast.title()); let episodes = podcast.episodes(); - launch_mpv(episodes[episodes.len() - ep_num].download_url().unwrap()); + let episode = episodes[episodes.len() - ep_num].clone(); + + let mut filename = String::from(episode.title().unwrap()); + filename.push_str(episode.download_extension().unwrap()); + path.push(filename); + match path.exists() { + true => launch_mpv(path.to_str().unwrap()), + false => launch_mpv(episode.url().unwrap()), + } } } } @@ -70,8 +80,6 @@ pub fn stream_episode(state: State, p_search: &str, e_search: &str) { fn launch_mpv(url: &str) { Command::new("mpv") .args(&["--audio-display=no", url]) - .stdin(Stdio::inherit()) - .stdout(Stdio::inherit()) - .output() + .status() .expect("failed to execute process"); } diff --git a/src/main.rs b/src/main.rs index 2ab284c..a001ad4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -105,7 +105,7 @@ fn main() { let play_matches = matches.subcommand_matches("play").unwrap(); let podcast = play_matches.value_of("PODCAST").unwrap(); let episode = play_matches.value_of("EPISODE").unwrap(); - stream_episode(state, podcast, episode); + play_episode(state, podcast, episode); } Some("subscribe") => { state.subscribe( diff --git a/src/structs.rs b/src/structs.rs index ac1de96..51f4fc1 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -60,8 +60,10 @@ impl State { } } +#[derive(Clone)] pub struct Podcast(Channel); +#[derive(Clone)] pub struct Episode(Item); impl From<Channel> for Podcast { @@ -126,14 +128,14 @@ impl Episode { self.0.title() } - pub fn download_url(&self) -> Option<&str> { + pub fn url(&self) -> Option<&str> { match self.0.enclosure() { Some(val) => Some(val.url()), None => None, } } - fn download_extension(&self) -> Option<&str> { + pub fn download_extension(&self) -> Option<&str> { match self.0.enclosure() { Some(enclosure) => { match enclosure.mime_type() { @@ -152,7 +154,7 @@ impl Episode { path.push(podcast_name); DirBuilder::new().recursive(true).create(&path).unwrap(); - if let Some(url) = self.download_url() { + if let Some(url) = self.url() { if let Some(title) = self.title() { println!("Downloading: {}", title); let mut filename = String::from(title); |
