diff --git a/src/ln/ln.rs b/src/ln/ln.rs index ee9acb1..0cdd130 100644 --- a/src/ln/ln.rs +++ b/src/ln/ln.rs @@ -1,4 +1,4 @@ -use crate::ln::open_text::*; +use crate::ln::open_text::{open_bat, open_glow}; use crate::ln::scraper::*; use crate::ln::tracker::*; use crossterm::{ @@ -113,7 +113,7 @@ impl<'a> App { } } -pub fn ln_ui(chapter: u32) -> Result<(), Box> { +pub fn ln_ui(chapter: u32, reader: String) -> Result<(), Box> { // setup terminal let _ = get_ln_json(); enable_raw_mode()?; @@ -130,7 +130,7 @@ pub fn ln_ui(chapter: u32) -> Result<(), Box> { app.current_page_number = (chapter / 48.0).ceil() as u32; } - let res = run_app(&mut terminal, app); + let res = run_app(&mut terminal, app, &*reader); // restore terminal disable_raw_mode()?; @@ -148,7 +148,7 @@ pub fn ln_ui(chapter: u32) -> Result<(), Box> { Ok(()) } -fn run_app(terminal: &mut Terminal, mut app: App) -> io::Result<()> { +fn run_app(terminal: &mut Terminal, mut app: App, reader: &str) -> io::Result<()> { let mut chapter_select = false; loop { @@ -244,7 +244,11 @@ fn run_app(terminal: &mut Terminal, mut app: App) -> io::Result<( file.sync_all().expect("Unable to sync file"); }; terminal.clear()?; - let _ = open_bat(); + let _ = match reader { + "bat" => open_bat(), + "glow" => open_glow(), + &_ => todo!(), + }; write_ln_progress( &app.title, &app.current_page_number, diff --git a/src/ln/open_text.rs b/src/ln/open_text.rs index 22678c9..0c389d1 100644 --- a/src/ln/open_text.rs +++ b/src/ln/open_text.rs @@ -3,16 +3,15 @@ use std::process::{Command, ExitStatus, Stdio}; #[allow(unused_assignments)] pub fn open_bat() -> Result { - let termsize::Size {rows: _, cols} = termsize::get().unwrap(); + let termsize::Size { rows: _, cols } = termsize::get().unwrap(); let mut path = String::new(); - if cfg!(target_os = "windows"){ + if cfg!(target_os = "windows") { use dirs::home_dir; - let mut home = format!("{:?}",home_dir()).replace("\\\\","/"); + let mut home = format!("{:?}", home_dir()).replace("\\\\", "/"); home.drain(0..6); - home.drain(home.len()-2..home.len()); - path = format!("{}/AppData/Roaming/log_e",home).to_string(); - } - else{ + home.drain(home.len() - 2..home.len()); + path = format!("{}/AppData/Roaming/log_e", home).to_string(); + } else { path = "/tmp/log_e".to_string(); } @@ -37,3 +36,36 @@ pub fn open_bat() -> Result { .spawn()? .wait() } + +#[allow(unused_assignments)] +pub fn open_glow() -> Result { + let termsize::Size { rows: _, cols } = termsize::get().unwrap(); + let mut path = String::new(); + if cfg!(target_os = "windows") { + use dirs::home_dir; + let mut home = format!("{:?}", home_dir()).replace("\\\\", "/"); + home.drain(0..6); + home.drain(home.len() - 2..home.len()); + path = format!("{}/AppData/Roaming/log_e", home).to_string(); + } else { + path = "/tmp/log_e".to_string(); + } + + let soft_wrap = match Command::new("fold") + .arg("-s") + .arg("-w") + .arg((cols - 9).to_string()) + .arg(path) + .stdout(Stdio::piped()) + .spawn() + { + Err(why) => panic!("couldn't spawn wc: {}", why), + Ok(soft_wrap) => soft_wrap, + }; + + Command::new("glow") + .arg("-p") + .stdin(soft_wrap.stdout.unwrap()) + .spawn()? + .wait() +} diff --git a/src/main.rs b/src/main.rs index 1393a7e..3fb391e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,6 +18,7 @@ fn main() { //let search = option string let mut count = 0; let mut provider: String = "gogo".to_string(); + let mut reader: String = "bat".to_string(); let mut cast = (false, "0".to_string()); for arg in std::env::args() { match &*arg { @@ -26,19 +27,31 @@ fn main() { "--provider" | "-r" => { if let Some(arg) = std::env::args().nth(count + 1) { //get the next argument and see if it is = to gogo of vrv - if arg == "vrv" { - provider = "vrv".to_string(); - count += 1; - } else if arg == "gogo" { - provider = "gogo".to_string(); - count += 1; - } else { - provider = "gogo".to_string(); + match arg.as_str() { + "vrv" | "gogo" => { + provider = arg; + count += 1; + } + &_ => provider = "gogo".to_string(), } } else { provider = "vrv".to_string(); } } + "--reader" | "-R" => { + if let Some(arg) = std::env::args().nth(count + 1) { + //get the next argument and see if it is = to gogo of vrv + match arg.as_str() { + "bat" | "glow" => { + reader = arg; + count += 1; + } + &_ => reader = "bat".to_string(), + } + } else { + provider = "glow".to_string(); + } + } "--cast" | "-C" => { if let Some(arg) = std::env::args().nth(count + 1) { cast = (true, String::from(arg)) @@ -80,7 +93,7 @@ fn main() { } if ln == true { //ln_read(&search, chapter); - _ = ln_ui(chapter); + _ = ln_ui(chapter, reader); } else if anime == true { //anime_stream(search, episode, resume);