aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorNathan2017-07-22 09:24:43 -0400
committerNathan2017-07-22 09:24:43 -0400
commitc2a8ea951ad98baa7f1776cba6edf7127860cbb3 (patch)
tree442b61762d2299a32b54e7f80dd6e9f4e89ff540 /src
parent1462b58d2a5ad5f7cbbd1086cd1219048584e69c (diff)
downloadpodcast-c2a8ea951ad98baa7f1776cba6edf7127860cbb3.tar.bz2
Attempt to play in VLC if mpv isn't found
Diffstat (limited to 'src')
-rw-r--r--src/actions.rs43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/actions.rs b/src/actions.rs
index 15d19a4..d81aa8c 100644
--- a/src/actions.rs
+++ b/src/actions.rs
@@ -3,7 +3,7 @@ use reqwest;
use rss::Channel;
use std::fs::{DirBuilder, File};
use std::io::{self, Read, Write};
-use std::process::{Command, ExitStatus};
+use std::process::Command;
use structs::*;
use utils::*;
@@ -101,28 +101,41 @@ pub fn play_episode(state: &State, p_search: &str, ep_num_string: &str) {
path.push(podcast.title());
path.push(filename);
if path.exists() {
- if let Err(err) = launch_mpv(path.to_str().unwrap()) {
- handle_launch_mpv_error(err);
- }
+ launch_player(path.to_str().unwrap());
} else {
- if let Err(err) = launch_mpv(episode.url().unwrap()) {
- handle_launch_mpv_error(err);
- }
+ launch_player(episode.url().unwrap());
}
return;
}
}
}
-fn launch_mpv(url: &str) -> io::Result<ExitStatus> {
- Command::new("mpv")
- .args(&["--audio-display=no", url])
- .status()
+fn launch_player(url: &str) {
+ if let Err(_) = launch_mpv(&url) {
+ launch_vlc(url)
+ }
+}
+
+fn launch_mpv(url: &str) -> Result<(), io::Error> {
+ if let Err(err) = Command::new("mpv").args(&["--audio-display=no", "--ytdl=no", url]).status() {
+ match err.kind() {
+ io::ErrorKind::NotFound => {
+ eprintln!("Couldn't open mpv\nTrying vlc...");
+ return Err(err);
+ },
+ _ => eprintln!("Error: {}", err),
+ }
+ }
+ Ok(())
}
-fn handle_launch_mpv_error(err: io::Error) {
- match err.kind() {
- io::ErrorKind::NotFound => eprintln!("mpv not found in PATH, is it installed?"),
- _ => eprintln!("Error: {}", err),
+fn launch_vlc(url: &str) {
+ if let Err(err) = Command::new("vlc").args(&["-I ncurses", url]).status() {
+ match err.kind() {
+ io::ErrorKind::NotFound => {
+ eprintln!("vlc not found in PATH\nAborting...");
+ },
+ _ => eprintln!("Error: {}", err),
+ }
}
}