feat: Allow millisecond offset for timeturner

Co-authored-by: aider (gemini/gemini-2.5-pro-preview-05-06) <aider@aider.chat>
This commit is contained in:
Chaos Rogers 2025-07-29 11:39:46 +01:00
parent a12ee88b9b
commit c712014bb9
6 changed files with 25 additions and 8 deletions

View file

@ -57,7 +57,7 @@ pub fn calculate_target_time(frame: &LtcFrame, config: &Config) -> DateTime<Loca
+ ChronoDuration::seconds(offset.seconds);
// Frame offset needs to be converted to milliseconds
let frame_offset_ms = (offset.frames as f64 / frame.frame_rate * 1000.0).round() as i64;
dt_local + ChronoDuration::milliseconds(frame_offset_ms)
dt_local + ChronoDuration::milliseconds(frame_offset_ms + offset.milliseconds)
}
pub fn trigger_sync(frame: &LtcFrame, config: &Config) -> Result<String, ()> {
@ -177,6 +177,7 @@ mod tests {
minutes: 5,
seconds: 10,
frames: 12, // 12 frames at 25fps is 480ms
milliseconds: 20,
};
let target_time = calculate_target_time(&frame, &config);
@ -184,8 +185,8 @@ mod tests {
assert_eq!(target_time.hour(), 11);
assert_eq!(target_time.minute(), 25);
assert_eq!(target_time.second(), 40);
// 480ms
assert_eq!(target_time.nanosecond(), 480_000_000);
// 480ms + 20ms = 500ms
assert_eq!(target_time.nanosecond(), 500_000_000);
}
#[test]
@ -197,14 +198,15 @@ mod tests {
minutes: -5,
seconds: -10,
frames: -12, // -480ms
milliseconds: -80,
};
let target_time = calculate_target_time(&frame, &config);
assert_eq!(target_time.hour(), 9);
assert_eq!(target_time.minute(), 15);
assert_eq!(target_time.second(), 20);
assert_eq!(target_time.nanosecond(), 0);
assert_eq!(target_time.second(), 19);
assert_eq!(target_time.nanosecond(), 920_000_000);
}
#[test]