Move UTF-8 decoding during streaming to Session

This commit is contained in:
Marcin Kulik
2024-09-21 10:59:22 +02:00
parent cab0490e1e
commit 3855e0dbc8
2 changed files with 14 additions and 16 deletions

View File

@@ -193,27 +193,17 @@ async fn event_loop(
theme: Option<tty::Theme>,
) {
let mut session = session::Session::new(tty_size, theme);
let mut input_decoder = util::Utf8Decoder::new();
let mut output_decoder = util::Utf8Decoder::new();
loop {
tokio::select! {
event = events.recv() => {
match event {
Some(Event::Output(time, data)) => {
let text = output_decoder.feed(&data);
if !text.is_empty() {
session.output(time, text);
}
session.output(time, &data);
}
Some(Event::Input(time, data)) => {
let text = input_decoder.feed(&data);
if !text.is_empty() {
session.input(time, text);
}
session.input(time, &data);
}
Some(Event::Resize(time, new_tty_size)) => {

View File

@@ -1,4 +1,5 @@
use crate::tty;
use crate::util;
use anyhow::Result;
use futures_util::{stream, Stream, StreamExt};
use std::{
@@ -14,6 +15,7 @@ pub struct Session {
stream_time: u64,
last_event_time: Instant,
theme: Option<tty::Theme>,
output_decoder: util::Utf8Decoder,
}
#[derive(Clone)]
@@ -40,17 +42,23 @@ impl Session {
stream_time: 0,
last_event_time: Instant::now(),
theme,
output_decoder: util::Utf8Decoder::new(),
}
}
pub fn output(&mut self, time: u64, data: String) {
self.vt.feed_str(&data);
let _ = self.broadcast_tx.send(Event::Stdout(time, data));
pub fn output(&mut self, time: u64, data: &[u8]) {
let text = self.output_decoder.feed(data);
if !text.is_empty() {
self.vt.feed_str(&text);
let _ = self.broadcast_tx.send(Event::Stdout(time, text));
}
self.stream_time = time;
self.last_event_time = Instant::now();
}
pub fn input(&mut self, time: u64, _data: String) {
pub fn input(&mut self, time: u64, _data: &[u8]) {
self.stream_time = time;
self.last_event_time = Instant::now();
}