2024-01-02 12:23:01 +01:00
|
|
|
use crate::format::asciicast;
|
2023-12-22 11:45:50 +01:00
|
|
|
use anyhow::Result;
|
|
|
|
|
use clap::Args;
|
2024-01-02 12:23:01 +01:00
|
|
|
use std::{fs, io};
|
2023-12-22 11:45:50 +01:00
|
|
|
|
|
|
|
|
#[derive(Debug, Args)]
|
|
|
|
|
pub struct Cli {
|
|
|
|
|
#[arg(required = true)]
|
|
|
|
|
filename: Vec<String>,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Cli {
|
|
|
|
|
pub fn run(self) -> Result<()> {
|
2024-01-18 16:32:17 +01:00
|
|
|
let mut writer = asciicast::Writer::new(io::stdout(), false, 0);
|
2024-01-02 12:23:01 +01:00
|
|
|
let mut time_offset: u64 = 0;
|
|
|
|
|
let mut first = true;
|
|
|
|
|
|
|
|
|
|
for path in self.filename.iter() {
|
|
|
|
|
let reader = io::BufReader::new(fs::File::open(path)?);
|
2024-01-20 22:35:20 +01:00
|
|
|
let recording = asciicast::open(reader)?;
|
2024-01-02 12:23:01 +01:00
|
|
|
let mut time = time_offset;
|
|
|
|
|
|
|
|
|
|
if first {
|
2024-01-20 22:35:20 +01:00
|
|
|
writer.write_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;
|
|
|
|
|
writer.write_event(event)?;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
time_offset = time;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Ok(())
|
2023-12-22 11:45:50 +01:00
|
|
|
}
|
|
|
|
|
}
|