v1.5.1: don't include fractional seconds in displayed timestamps in chosts
This commit is contained in:
parent
f584b17dd1
commit
9c366efab1
2
Cargo.lock
generated
2
Cargo.lock
generated
|
@ -1220,7 +1220,7 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "screencap-bot"
|
name = "screencap-bot"
|
||||||
version = "1.5.0"
|
version = "1.5.1"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "screencap-bot"
|
name = "screencap-bot"
|
||||||
version = "1.5.0"
|
version = "1.5.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["xenofem <xenofem@xeno.science>"]
|
authors = ["xenofem <xenofem@xeno.science>"]
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
51
src/main.rs
51
src/main.rs
|
@ -97,7 +97,7 @@ async fn post_random_capture<R: Rng>(
|
||||||
.with_context(|| format!("Failed to get info for media file {}", file.display()))?;
|
.with_context(|| format!("Failed to get info for media file {}", file.display()))?;
|
||||||
debug!(
|
debug!(
|
||||||
"Media duration: {}",
|
"Media duration: {}",
|
||||||
format_timestamp(media_info.duration_secs, None)
|
format_timestamp(media_info.duration_secs, None, true)
|
||||||
);
|
);
|
||||||
debug!(
|
debug!(
|
||||||
"Subtitle stream index: {:?}",
|
"Subtitle stream index: {:?}",
|
||||||
|
@ -115,10 +115,13 @@ async fn post_random_capture<R: Rng>(
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
let timestamp = max_timestamp * rng.sample::<f64, _>(Standard);
|
let timestamp = max_timestamp * rng.sample::<f64, _>(Standard);
|
||||||
let formatted_timestamp = format_timestamp(timestamp, Some(media_info.duration_secs));
|
info!(
|
||||||
info!("Taking capture at {}", formatted_timestamp);
|
"Taking capture at {}",
|
||||||
|
format_timestamp(timestamp, Some(media_info.duration_secs), true)
|
||||||
|
);
|
||||||
|
|
||||||
let mut attachments = Vec::new();
|
let mut attachments = Vec::new();
|
||||||
|
let display_timestamp = format_timestamp(timestamp, Some(media_info.duration_secs), false);
|
||||||
|
|
||||||
if conf.capture_images {
|
if conf.capture_images {
|
||||||
let image_data = media::take_screencap(file, timestamp, media_info.subtitle_stream_index)
|
let image_data = media::take_screencap(file, timestamp, media_info.subtitle_stream_index)
|
||||||
|
@ -130,7 +133,7 @@ async fn post_random_capture<R: Rng>(
|
||||||
|
|
||||||
let image_attachment = eggbug::Attachment::new(
|
let image_attachment = eggbug::Attachment::new(
|
||||||
image_data,
|
image_data,
|
||||||
format!("{} @ {}.png", descriptor, formatted_timestamp),
|
format!("{} @ {}.png", descriptor, display_timestamp),
|
||||||
String::from("image/png"),
|
String::from("image/png"),
|
||||||
eggbug::MediaMetadata::Image {
|
eggbug::MediaMetadata::Image {
|
||||||
width: Some(image_size.width as u32),
|
width: Some(image_size.width as u32),
|
||||||
|
@ -139,7 +142,7 @@ async fn post_random_capture<R: Rng>(
|
||||||
)
|
)
|
||||||
.with_alt_text(format!(
|
.with_alt_text(format!(
|
||||||
"Screencap of {} at {}",
|
"Screencap of {} at {}",
|
||||||
descriptor, formatted_timestamp
|
descriptor, display_timestamp
|
||||||
));
|
));
|
||||||
|
|
||||||
attachments.push(image_attachment);
|
attachments.push(image_attachment);
|
||||||
|
@ -153,11 +156,11 @@ async fn post_random_capture<R: Rng>(
|
||||||
|
|
||||||
let audio_attachment = eggbug::Attachment::new(
|
let audio_attachment = eggbug::Attachment::new(
|
||||||
audio_data,
|
audio_data,
|
||||||
format!("{} @ {}.mp3", descriptor, formatted_timestamp),
|
format!("{} @ {}.mp3", descriptor, display_timestamp),
|
||||||
String::from("audio/mpeg"),
|
String::from("audio/mpeg"),
|
||||||
eggbug::MediaMetadata::Audio {
|
eggbug::MediaMetadata::Audio {
|
||||||
artist: show.title.clone(),
|
artist: show.title.clone(),
|
||||||
title: format!("{} @ {}", descriptor, formatted_timestamp),
|
title: format!("{} @ {}", descriptor, display_timestamp),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -193,16 +196,28 @@ async fn post_random_capture<R: Rng>(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn format_timestamp(timestamp: f64, total_duration: Option<f64>) -> String {
|
fn format_timestamp(
|
||||||
|
timestamp: f64,
|
||||||
|
total_duration: Option<f64>,
|
||||||
|
fractional_seconds: bool,
|
||||||
|
) -> String {
|
||||||
let total_duration = total_duration.unwrap_or(timestamp);
|
let total_duration = total_duration.unwrap_or(timestamp);
|
||||||
format!(
|
|
||||||
"{}{:02}:{:05.2}",
|
let truncated_timestamp = timestamp as u32;
|
||||||
if total_duration >= 3600.0 {
|
|
||||||
format!("{}:", (timestamp / 3600.0) as u32)
|
let optional_hours = if total_duration >= 3600.0 {
|
||||||
} else {
|
format!("{}:", truncated_timestamp / 3600)
|
||||||
String::new()
|
} else {
|
||||||
},
|
String::new()
|
||||||
((timestamp % 3600.0) / 60.0) as u32,
|
};
|
||||||
timestamp % 60.0
|
|
||||||
)
|
let minutes = format!("{:02}", (truncated_timestamp % 3600) / 60);
|
||||||
|
|
||||||
|
let seconds = if fractional_seconds {
|
||||||
|
format!("{:05.2}", timestamp % 60.0)
|
||||||
|
} else {
|
||||||
|
format!("{:02}", truncated_timestamp % 60)
|
||||||
|
};
|
||||||
|
|
||||||
|
format!("{optional_hours}{minutes}:{seconds}")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue