From e587fad0e6b2aef3d8c46a8e65a7deb465165f68 Mon Sep 17 00:00:00 2001 From: walksanatora Date: Thu, 27 Oct 2022 23:12:30 -0700 Subject: [PATCH] autoplay feature so that media is automatically played --- src/args.rs | 19 +++++++++++++++++++ src/config.rs | 9 +++++++++ src/main.rs | 3 +++ src/ui.rs | 2 +- 4 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/args.rs b/src/args.rs index 5e52493..0bed262 100644 --- a/src/args.rs +++ b/src/args.rs @@ -104,6 +104,8 @@ pub fn parse>(args: &[T]) -> Result { let mut set_notor = false; let mut set_media = false; let mut set_nomedia = false; + let mut set_autoplay = false; + let mut set_noautoplay = false; while let Some(arg) = iter.next() { match arg.as_ref() { @@ -192,6 +194,23 @@ pub fn parse>(args: &[T]) -> Result { set_nomedia = true; cfg.media = None; } + "-a" | "--autoplay" | "-autoplay" => { + if set_nomedia { + return Err(ArgError::new("can't set both --no-media and --autoplay")) + } + if set_noautoplay { + return Err(ArgError::new("can't set both --autoplay and --no-autoplay")) + } + set_autoplay = true; + cfg.autoplay = true; + } + "-A" | "--no-autoplay" | "-no-autoplay" => { + if set_autoplay { + return Err(ArgError::new("can't set both --autoplay and --no-autoplay")) + } + cfg.autoplay = false; + set_noautoplay = true; + } "-e" | "--encoding" | "-encoding" => { if let Some(encoding) = iter.next() { cfg.encoding = Encoding::from_str(encoding.as_ref()) diff --git a/src/config.rs b/src/config.rs index 86d484c..f18219d 100644 --- a/src/config.rs +++ b/src/config.rs @@ -44,6 +44,9 @@ wide no # Program to use to open media files. media mpv +# Whether to auto play media +autoplay no + # Use emoji indicators for TLS & Tor. (--emoji) emoji no @@ -71,6 +74,8 @@ pub struct Config { pub emoji: bool, /// Media player to use. pub media: Option, + /// Whether to automatically play media + pub autoplay: bool, /// Default encoding pub encoding: Encoding, /// UI mode. Can't be set in conf file. @@ -88,6 +93,7 @@ impl Default for Config { wide: false, emoji: false, media: Some(DEFAULT_MEDIA_PLAYER.into()), + autoplay: false, encoding: Encoding::default(), mode: ui::Mode::default(), wrap: 0, @@ -173,6 +179,9 @@ fn parse(text: &str) -> Result { _ => Some(val.into()), } } + "autoplay" => { + cfg.autoplay = to_bool(val)? + } "encoding" => { cfg.encoding = Encoding::from_str(val) .map_err(|e| error!("{} on line {}: {:?}", e, linenum, line))?; diff --git a/src/main.rs b/src/main.rs index fbb6b63..4641126 100644 --- a/src/main.rs +++ b/src/main.rs @@ -81,6 +81,9 @@ Options: -m, --media PROGRAM Use to open media files. Default: mpv -M, --no-media Just download media files, don't download + -a, --autoplay Skip the play media prompy + -A, --no-autoplay Do not skip the media prompt + -r, --raw Print raw Gopher response only -p, --print Print rendered Gopher response only -l, --local Connect to 127.0.0.1:7070 diff --git a/src/ui.rs b/src/ui.rs index fb2f2db..7507f72 100644 --- a/src/ui.rs +++ b/src/ui.rs @@ -206,7 +206,7 @@ impl UI { if typ.is_media() && self.config.read().unwrap().media.is_some() { self.dirty = true; - return if self.confirm(&format!("Open in media player? {}", url)) { + return if self.config.read().unwrap().autoplay || self.confirm(&format!("Open in media player? {}", url)) { utils::open_media(self.config.read().unwrap().media.as_ref().unwrap(), url) } else { Ok(())