mirror of
https://github.com/asciinema/asciinema.git
synced 2025-12-16 11:48:13 +01:00
Move UTF-8 decoding during streaming to Session
This commit is contained in:
@@ -193,27 +193,17 @@ async fn event_loop(
|
|||||||
theme: Option<tty::Theme>,
|
theme: Option<tty::Theme>,
|
||||||
) {
|
) {
|
||||||
let mut session = session::Session::new(tty_size, 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 {
|
loop {
|
||||||
tokio::select! {
|
tokio::select! {
|
||||||
event = events.recv() => {
|
event = events.recv() => {
|
||||||
match event {
|
match event {
|
||||||
Some(Event::Output(time, data)) => {
|
Some(Event::Output(time, data)) => {
|
||||||
let text = output_decoder.feed(&data);
|
session.output(time, &data);
|
||||||
|
|
||||||
if !text.is_empty() {
|
|
||||||
session.output(time, text);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(Event::Input(time, data)) => {
|
Some(Event::Input(time, data)) => {
|
||||||
let text = input_decoder.feed(&data);
|
session.input(time, &data);
|
||||||
|
|
||||||
if !text.is_empty() {
|
|
||||||
session.input(time, text);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Some(Event::Resize(time, new_tty_size)) => {
|
Some(Event::Resize(time, new_tty_size)) => {
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use crate::tty;
|
use crate::tty;
|
||||||
|
use crate::util;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use futures_util::{stream, Stream, StreamExt};
|
use futures_util::{stream, Stream, StreamExt};
|
||||||
use std::{
|
use std::{
|
||||||
@@ -14,6 +15,7 @@ pub struct Session {
|
|||||||
stream_time: u64,
|
stream_time: u64,
|
||||||
last_event_time: Instant,
|
last_event_time: Instant,
|
||||||
theme: Option<tty::Theme>,
|
theme: Option<tty::Theme>,
|
||||||
|
output_decoder: util::Utf8Decoder,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@@ -40,17 +42,23 @@ impl Session {
|
|||||||
stream_time: 0,
|
stream_time: 0,
|
||||||
last_event_time: Instant::now(),
|
last_event_time: Instant::now(),
|
||||||
theme,
|
theme,
|
||||||
|
output_decoder: util::Utf8Decoder::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn output(&mut self, time: u64, data: String) {
|
pub fn output(&mut self, time: u64, data: &[u8]) {
|
||||||
self.vt.feed_str(&data);
|
let text = self.output_decoder.feed(data);
|
||||||
let _ = self.broadcast_tx.send(Event::Stdout(time, data));
|
|
||||||
|
if !text.is_empty() {
|
||||||
|
self.vt.feed_str(&text);
|
||||||
|
let _ = self.broadcast_tx.send(Event::Stdout(time, text));
|
||||||
|
}
|
||||||
|
|
||||||
self.stream_time = time;
|
self.stream_time = time;
|
||||||
self.last_event_time = Instant::now();
|
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.stream_time = time;
|
||||||
self.last_event_time = Instant::now();
|
self.last_event_time = Instant::now();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user