html terminal
Diffstat (limited to 'src/process.rs')
| -rw-r--r-- | src/process.rs | 51 |
1 files changed, 10 insertions, 41 deletions
diff --git a/src/process.rs b/src/process.rs index da36818..302a173 100644 --- a/src/process.rs +++ b/src/process.rs @@ -1,5 +1,3 @@ -use ansi_to_html::convert_escaped; -use std::sync::Arc; use std::time::Duration; use tokio::io::{AsyncReadExt, AsyncWriteExt}; use tokio::net::TcpStream; @@ -7,12 +5,10 @@ use tokio::sync::broadcast; use tokio::sync::broadcast::error::TryRecvError; use tokio::task::JoinHandle; -use crate::server::State; pub struct Process { inner: TcpStream, input: Option<broadcast::Receiver<String>>, - html_output: Option<broadcast::Sender<String>>, - plain_output: Option<broadcast::Sender<String>>, + output: Option<broadcast::Sender<String>>, } impl Process { @@ -23,8 +19,7 @@ impl Process { Self { inner: stream, input: None, - html_output: None, - plain_output: None, + output: None, } } @@ -33,30 +28,19 @@ impl Process { self } - pub fn html_output(mut self, output: broadcast::Sender<String>) -> Self { - self.html_output = Some(output); + pub fn output(mut self, output: broadcast::Sender<String>) -> Self { + self.output = Some(output); self } - pub fn plain_output(mut self, output: broadcast::Sender<String>) -> Self { - self.plain_output = Some(output); - self - } - - pub fn with_state(self, state: &Arc<State>) -> Self { - self.html_output(state.stdout_html.clone()) - .plain_output(state.stdout_plain.clone()) - } - pub fn link(mut self) -> JoinHandle<()> { define_print!("process"); let mut input = self.input.unwrap(); - let html_output = self.html_output.unwrap(); - let plain_output = self.plain_output.unwrap(); + let output = self.output.unwrap(); tokio::spawn(async move { let mut stdout = [0; 4096]; loop { - if html_output.receiver_count() + plain_output.receiver_count() == 0 { + if output.receiver_count() == 0 { async_std::task::sleep(Duration::from_millis(500)).await; continue; } @@ -84,27 +68,12 @@ impl Process { for line in string.lines() { output!("{line}"); } - if plain_output.receiver_count() > 0 { - let stripped = - String::from_utf8_lossy(&strip_ansi_escapes::strip(&string).unwrap()) - .into_owned(); - plain_output.send(stripped).unwrap(); - } - if html_output.receiver_count() > 0 { - html_output.send(ansi2html(&string)).unwrap(); - } + let stripped = + String::from_utf8_lossy(&strip_ansi_escapes::strip(&string).unwrap()) + .into_owned(); + output.send(stripped).unwrap(); async_std::task::sleep(Duration::from_millis(500)).await; } }) } } - -/// for dark theme -fn ansi2html(ansi: &str) -> String { - convert_escaped(ansi) - .unwrap() - .replace("#555", "#a4a4a0") - .replace("#55f", "#7486fd") - .replace("#fff", "wheat") - .replace("#a00", "#d05047") -} |