mirror of
https://github.com/asciinema/asciinema.git
synced 2025-12-16 11:48:13 +01:00
Improve append logic
This commit is contained in:
@@ -16,7 +16,7 @@ use tracing_subscriber::EnvFilter;
|
|||||||
use url::{form_urlencoded, Url};
|
use url::{form_urlencoded, Url};
|
||||||
|
|
||||||
use crate::api;
|
use crate::api;
|
||||||
use crate::asciicast;
|
use crate::asciicast::{self, Version};
|
||||||
use crate::cli::{self, Format, RelayTarget};
|
use crate::cli::{self, Format, RelayTarget};
|
||||||
use crate::config::{self, Config};
|
use crate::config::{self, Config};
|
||||||
use crate::encoder::{AsciicastV2Encoder, AsciicastV3Encoder, RawEncoder, TextEncoder};
|
use crate::encoder::{AsciicastV2Encoder, AsciicastV3Encoder, RawEncoder, TextEncoder};
|
||||||
@@ -187,14 +187,6 @@ impl cli::Session {
|
|||||||
env: &HashMap<String, String>,
|
env: &HashMap<String, String>,
|
||||||
notifier: N,
|
notifier: N,
|
||||||
) -> Result<FileWriterStarter> {
|
) -> Result<FileWriterStarter> {
|
||||||
let format = self.output_format.unwrap_or_else(|| {
|
|
||||||
if path.to_lowercase().ends_with(".txt") {
|
|
||||||
Format::Txt
|
|
||||||
} else {
|
|
||||||
Format::AsciicastV3
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let mut overwrite = self.overwrite;
|
let mut overwrite = self.overwrite;
|
||||||
let mut append = self.append;
|
let mut append = self.append;
|
||||||
let path = Path::new(path);
|
let path = Path::new(path);
|
||||||
@@ -214,6 +206,24 @@ impl cli::Session {
|
|||||||
append = false;
|
append = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let format = self.output_format.map(Ok).unwrap_or_else(|| {
|
||||||
|
if path.extension().is_some_and(|ext| ext == "txt") {
|
||||||
|
Ok(Format::Txt)
|
||||||
|
} else if append {
|
||||||
|
match asciicast::open_from_path(path) {
|
||||||
|
Ok(cast) => match cast.version {
|
||||||
|
Version::One => bail!("appending to asciicast v1 files is not supported"),
|
||||||
|
Version::Two => Ok(Format::AsciicastV2),
|
||||||
|
Version::Three => Ok(Format::AsciicastV3),
|
||||||
|
},
|
||||||
|
|
||||||
|
Err(e) => bail!("can't append: {e}"),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ok(Format::AsciicastV3)
|
||||||
|
}
|
||||||
|
})?;
|
||||||
|
|
||||||
let file = OpenOptions::new()
|
let file = OpenOptions::new()
|
||||||
.write(true)
|
.write(true)
|
||||||
.append(append)
|
.append(append)
|
||||||
@@ -222,12 +232,6 @@ impl cli::Session {
|
|||||||
.truncate(overwrite)
|
.truncate(overwrite)
|
||||||
.open(path)?;
|
.open(path)?;
|
||||||
|
|
||||||
let time_offset = if append && format == Format::AsciicastV2 {
|
|
||||||
asciicast::get_duration(path)?
|
|
||||||
} else {
|
|
||||||
0
|
|
||||||
};
|
|
||||||
|
|
||||||
let metadata = self.build_asciicast_metadata(term_type, term_version, env, config);
|
let metadata = self.build_asciicast_metadata(term_type, term_version, env, config);
|
||||||
let notifier = Box::new(notifier);
|
let notifier = Box::new(notifier);
|
||||||
|
|
||||||
@@ -245,6 +249,12 @@ impl cli::Session {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Format::AsciicastV2 => {
|
Format::AsciicastV2 => {
|
||||||
|
let time_offset = if append {
|
||||||
|
asciicast::get_duration(path)?
|
||||||
|
} else {
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
let writer = Box::new(LineWriter::new(file));
|
let writer = Box::new(LineWriter::new(file));
|
||||||
let encoder = Box::new(AsciicastV2Encoder::new(append, time_offset));
|
let encoder = Box::new(AsciicastV2Encoder::new(append, time_offset));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user