diff options
Diffstat (limited to 'src')
| -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); | 
