html terminal
Diffstat (limited to 'src/process.rs')
-rw-r--r--src/process.rs51
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")
-}