aboutsummaryrefslogtreecommitdiffstats
path: root/teleterm-web
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2019-11-23 02:44:54 -0500
committerJesse Luehrs <doy@tozt.net>2019-11-23 02:44:54 -0500
commit989c7f34b30198a87948d37e782f48d771336fa1 (patch)
tree2d600e425f8d09b1cfb6e3b98995126f10402563 /teleterm-web
parentb47e647487ab7eebb210bb0cd7f2734a437ca499 (diff)
downloadteleterm-989c7f34b30198a87948d37e782f48d771336fa1.tar.gz
teleterm-989c7f34b30198a87948d37e782f48d771336fa1.zip
remove some flickering
Diffstat (limited to 'teleterm-web')
-rw-r--r--teleterm-web/src/model.rs15
-rw-r--r--teleterm-web/src/views/watch.rs6
2 files changed, 19 insertions, 2 deletions
diff --git a/teleterm-web/src/model.rs b/teleterm-web/src/model.rs
index 362b4bd..8a22f1b 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 {
ws: WebSocket,
term: vt100::Parser,
+ received_data: bool,
}
impl Drop for WatchConn {
@@ -95,6 +96,13 @@ impl Model {
self.watch_conn.is_some()
}
+ pub(crate) fn received_data(&self) -> bool {
+ self.watch_conn
+ .as_ref()
+ .map(|conn| conn.received_data)
+ .unwrap_or(false)
+ }
+
fn watch(&mut self, id: &str, orders: &mut impl Orders<crate::Msg>) {
let ws = crate::ws::connect(
&format!("{}?id={}", WATCH_URL, id),
@@ -103,7 +111,11 @@ impl Model {
orders,
);
let term = vt100::Parser::default();
- self.watch_conn = Some(WatchConn { ws, term })
+ self.watch_conn = Some(WatchConn {
+ ws,
+ term,
+ received_data: false,
+ })
}
fn update_sessions(&mut self, sessions: Vec<crate::protocol::Session>) {
@@ -117,6 +129,7 @@ impl Model {
fn process(&mut self, bytes: &[u8]) {
if let Some(conn) = &mut self.watch_conn {
conn.term.process(bytes);
+ conn.received_data = true;
}
}
diff --git a/teleterm-web/src/views/watch.rs b/teleterm-web/src/views/watch.rs
index 5fe7830..cf00fff 100644
--- a/teleterm-web/src/views/watch.rs
+++ b/teleterm-web/src/views/watch.rs
@@ -3,7 +3,11 @@ use crate::prelude::*;
pub(crate) fn render(model: &crate::model::Model) -> Vec<Node<crate::Msg>> {
vec![
if let Some(screen) = model.screen() {
- crate::views::terminal::render(screen)
+ if model.received_data() {
+ crate::views::terminal::render(screen)
+ } else {
+ seed::empty![]
+ }
} else {
seed::empty![]
},