From 33cc13b554e6f4cc6e139b0eecf5c6e697433a9d Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 4 Dec 2021 02:08:27 -0500 Subject: initial implementation --- src/bin/ttyplay/main.rs | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/bin/ttyplay/main.rs (limited to 'src/bin/ttyplay/main.rs') diff --git a/src/bin/ttyplay/main.rs b/src/bin/ttyplay/main.rs new file mode 100644 index 0000000..f30cda4 --- /dev/null +++ b/src/bin/ttyplay/main.rs @@ -0,0 +1,43 @@ +use textmode::Textmode as _; + +#[derive(Debug, structopt::StructOpt)] +#[structopt(about = "ttyplay")] +struct Opt { + #[structopt(short, long, default_value = "ttyrec")] + file: std::ffi::OsString, +} + +async fn async_main(opt: Opt) -> anyhow::Result<()> { + let Opt { file } = opt; + + let fh = async_std::fs::File::open(file).await?; + let mut reader = ttyrec::Reader::new(fh); + + let mut input = textmode::Input::new().await?; + let mut output = textmode::Output::new().await?; + let _input_guard = input.take_raw_guard(); + let _output_guard = output.take_screen_guard(); + + let mut last_frame_time = None; + while let Ok(frame) = reader.read_frame().await { + if let Some(time) = last_frame_time { + async_std::task::sleep(frame.time - time).await; + } + output.write(&frame.data); + output.refresh().await?; + last_frame_time = Some(frame.time); + } + + Ok(()) +} + +#[paw::main] +fn main(opt: Opt) { + match async_std::task::block_on(async_main(opt)) { + Ok(_) => (), + Err(e) => { + eprintln!("ttyplay: {}", e); + std::process::exit(1); + } + }; +} -- cgit v1.2.3-54-g00ecf