From 989c7f34b30198a87948d37e782f48d771336fa1 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 23 Nov 2019 02:44:54 -0500 Subject: remove some flickering --- teleterm-web/src/model.rs | 15 ++++++++++++++- teleterm-web/src/views/watch.rs | 6 +++++- 2 files changed, 19 insertions(+), 2 deletions(-) (limited to 'teleterm-web') 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) { 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) { @@ -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> { 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![] }, -- cgit v1.2.3-54-g00ecf