2024-04-29 16:44:18 +02:00
|
|
|
use super::Command;
|
2024-01-23 11:52:28 +01:00
|
|
|
use crate::asciicast;
|
2024-04-29 16:44:18 +02:00
|
|
|
use crate::cli;
|
|
|
|
|
use crate::config::Config;
|
2023-12-22 11:45:50 +01:00
|
|
|
use anyhow::Result;
|
2024-01-22 12:05:50 +01:00
|
|
|
use std::io;
|
2024-10-17 17:31:59 +02:00
|
|
|
use std::io::Write;
|
2023-12-22 11:45:50 +01:00
|
|
|
|
2024-04-29 16:44:18 +02:00
|
|
|
impl Command for cli::Cat {
|
|
|
|
|
fn run(self, _config: &Config) -> Result<()> {
|
2024-10-17 17:31:59 +02:00
|
|
|
let mut encoder = asciicast::Encoder::new(0);
|
|
|
|
|
let mut stdout = io::stdout();
|
2024-01-02 12:23:01 +01:00
|
|
|
let mut time_offset: u64 = 0;
|
|
|
|
|
let mut first = true;
|
|
|
|
|
|
|
|
|
|
for path in self.filename.iter() {
|
2024-01-22 12:05:50 +01:00
|
|
|
let recording = asciicast::open_from_path(path)?;
|
2024-01-02 12:23:01 +01:00
|
|
|
let mut time = time_offset;
|
|
|
|
|
|
|
|
|
|
if first {
|
2024-10-17 17:31:59 +02:00
|
|
|
stdout.write_all(&encoder.header(&recording.header))?;
|
2024-01-02 12:23:01 +01:00
|
|
|
first = false;
|
|
|
|
|
}
|
|
|
|
|
|
2024-01-20 22:35:20 +01:00
|
|
|
for event in recording.events {
|
2024-01-02 12:23:01 +01:00
|
|
|
let mut event = event?;
|
|
|
|
|
time = time_offset + event.time;
|
|
|
|
|
event.time = time;
|
2024-10-17 17:31:59 +02:00
|
|
|
stdout.write_all(&encoder.event(&event))?;
|
2024-01-02 12:23:01 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
time_offset = time;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(())
|
2023-12-22 11:45:50 +01:00
|
|
|
}
|
|
|
|
|
}
|