hook up --media flag

pull/22/head
chris west 4 years ago
parent 6fd90872e7
commit ac77420ba9

@ -106,6 +106,9 @@ pub fn parse<T: AsRef<str>>(args: &[T]) -> Result<Config, ArgError> {
let mut set_notls = false;
let mut set_tor = false;
let mut set_notor = false;
let mut set_media = false;
let mut set_nomedia = false;
while let Some(arg) = iter.next() {
match arg.as_ref() {
"-v" | "--version" | "-version" => {
@ -162,6 +165,24 @@ pub fn parse<T: AsRef<str>>(args: &[T]) -> Result<Config, ArgError> {
set_notor = true;
cfg.tor = false;
}
"-m" | "--media" | "-media" => {
if set_nomedia {
return Err(ArgError::new("can't set both --media and --no-media"));
}
set_media = true;
if let Some(player) = iter.next() {
cfg.media = Some(player.as_ref().to_string());
} else {
return Err(ArgError::new("--media expects a PROGRAM arg"));
}
}
"-M" | "--no-media" | "-no-media" => {
if set_media {
return Err(ArgError::new("can't set both --media and --no-media"));
}
set_nomedia = true;
cfg.media = None;
}
arg => {
if arg.starts_with('-') {
return Err(ArgError::new(format!("unknown flag: {}", arg)));

@ -188,10 +188,10 @@ impl UI {
// binary downloads
let typ = gopher::type_for_url(url);
if typ.is_media() {
if typ.is_media() && self.config.media.is_some() {
self.dirty = true;
return if self.confirm(&format!("Open in media player? {}", url)) {
utils::open_media(url)
utils::open_media(self.config.media.as_ref().unwrap(), url)
} else {
Ok(())
};

@ -1,5 +1,6 @@
//! Helper functions and macros.
use std::{
borrow::Cow,
io::{Result, Write},
process::{self, Stdio},
};
@ -96,12 +97,16 @@ pub fn open_external(url: &str) -> Result<()> {
}
}
/// Opens a media file with `mpv`.
pub fn open_media(url: &str) -> Result<()> {
/// Opens a media file with `mpv` or `--media`.
pub fn open_media(program: &str, url: &str) -> Result<()> {
use {crate::terminal, std::io};
// mpv only supports /9/
let url = url.replace("/;/", "/9/").replace("/s/", "/9/");
let url = if program.ends_with("mpv") {
Cow::from(url.replace("/;/", "/9/").replace("/s/", "/9/"))
} else {
Cow::from(url)
};
// support URL: selectors
let url = if let Some(idx) = url.find("URL:") {
@ -111,11 +116,8 @@ pub fn open_media(url: &str) -> Result<()> {
};
let errfn = |e| {
if let Err(e) = terminal::enable_raw_mode() {
error!("`mpv` error: {}", e)
} else {
error!("`mpv` error: {}", e)
}
terminal::enable_raw_mode().unwrap();
error!("Media player error: {}", e)
};
// clear screen first
@ -124,7 +126,7 @@ pub fn open_media(url: &str) -> Result<()> {
stdout.flush()?;
terminal::disable_raw_mode()?;
let mut cmd = process::Command::new("mpv")
let mut cmd = process::Command::new(program)
.arg(url)
.stdin(Stdio::inherit())
.stdout(Stdio::inherit())

Loading…
Cancel
Save