aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornjaremko2017-07-17 21:50:26 -0400
committernjaremko2017-07-17 21:50:26 -0400
commitcd83d6ecaf7d9025c3db452268cf246ae4c4aaa0 (patch)
tree77be33df40e823b08d234b8a7d09245049b35553
parentc981cf824f5d75423f88437361d915cb1233eb3a (diff)
downloadpodcast-cd83d6ecaf7d9025c3db452268cf246ae4c4aaa0.tar.bz2
Fix play functionality
-rw-r--r--src/actions.rs22
-rw-r--r--src/main.rs2
-rw-r--r--src/structs.rs8
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);