aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-22 08:29:00 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-22 08:29:00 -0500
commit57330afd153851af0051dd34ec5dfad7f44d3a03 (patch)
tree0db782ce970204a6750b5dbfa3a1c4a007c169c7 /teleterm-web
parent427375e2bef72f827e42814f5770265598c4a5eb (diff)
downloadteleterm-57330afd153851af0051dd34ec5dfad7f44d3a03.tar.gz
teleterm-57330afd153851af0051dd34ec5dfad7f44d3a03.zip
use vt100 to render the terminal data in the browser(!)
Diffstat (limited to 'teleterm-web')
-rw-r--r--teleterm-web/Cargo.toml1
-rw-r--r--teleterm-web/src/lib.rs7
-rw-r--r--teleterm-web/src/model.rs18
3 files changed, 20 insertions, 6 deletions
diff --git a/teleterm-web/Cargo.toml b/teleterm-web/Cargo.toml
index a7c82b6..47496de 100644
--- a/teleterm-web/Cargo.toml
+++ b/teleterm-web/Cargo.toml
@@ -18,5 +18,6 @@ log = "0.4"
seed = "0.4"
serde = "1"
serde_json = "1"
+vt100 = "0.6"
wasm-bindgen = "0.2"
web-sys = { version = "0.3", features = ["ErrorEvent", "MessageEvent", "WebSocket"] }
diff --git a/teleterm-web/src/lib.rs b/teleterm-web/src/lib.rs
index 030ac45..5dd5a33 100644
--- a/teleterm-web/src/lib.rs
+++ b/teleterm-web/src/lib.rs
@@ -59,11 +59,7 @@ fn update(
serde_json::from_str(&json).unwrap();
match msg {
crate::protocol::Message::TerminalOutput { data } => {
- log::info!(
- "{}: got bytes: {}",
- id,
- String::from_utf8_lossy(&data)
- );
+ model.process(&data);
}
}
}
@@ -87,6 +83,7 @@ fn view(model: &crate::model::Model) -> impl View<Msg> {
seed::h1!["it's a seed app"],
seed::ul![list],
seed::button![simple_ev(Ev::Click, Msg::Refresh), "refresh"],
+ seed::pre![model.screen()],
]
}
diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs
index 263dd7c..a90ebe2 100644
--- a/teleterm-web/src/model.rs
+++ b/teleterm-web/src/model.rs
@@ -6,6 +6,7 @@ const WATCH_URL: &str = "ws://127.0.0.1:4145/watch";
struct WatchConn {
#[allow(dead_code)] // no idea why it thinks this is dead
ws: WebSocket,
+ term: vt100::Parser,
}
impl Drop for WatchConn {
@@ -44,7 +45,8 @@ impl Model {
crate::Msg::Watch,
orders,
);
- self.watch_conn = Some(WatchConn { ws })
+ let term = vt100::Parser::default();
+ self.watch_conn = Some(WatchConn { ws, term })
}
pub fn sessions(&self) -> &[Session] {
@@ -54,4 +56,18 @@ impl Model {
pub fn update_sessions(&mut self, sessions: Vec<Session>) {
self.sessions = sessions;
}
+
+ pub fn process(&mut self, bytes: &[u8]) {
+ if let Some(conn) = &mut self.watch_conn {
+ conn.term.process(bytes);
+ }
+ }
+
+ pub fn screen(&self) -> String {
+ if let Some(conn) = &self.watch_conn {
+ conn.term.screen().contents()
+ } else {
+ "".to_string()
+ }
+ }
}