fix: resolve build errors by adapting to clock delta refactor

Co-authored-by: aider (gemini/gemini-2.5-pro-preview-05-06) <aider@aider.chat>
This commit is contained in:
Chaos Rogers 2025-07-28 23:58:52 +01:00
parent cc782fcd7e
commit 80faf4db9a
3 changed files with 11 additions and 34 deletions

View file

@ -220,11 +220,15 @@ mod tests {
let ltc_state = Arc::new(Mutex::new(get_test_ltc_state())); let ltc_state = Arc::new(Mutex::new(get_test_ltc_state()));
let config = Arc::new(Mutex::new(Config { let config = Arc::new(Mutex::new(Config {
hardware_offset_ms: 10, hardware_offset_ms: 10,
timeturner_offset: TimeturnerOffset { timeturner_offset: TimeturnerOffset::default(),
hours: 0, minutes: 0, seconds: 0, frames: 0 default_nudge_ms: 2,
}
})); }));
web::Data::new(AppState { ltc_state, config }) let log_buffer = Arc::new(Mutex::new(VecDeque::new()));
web::Data::new(AppState {
ltc_state,
config,
log_buffer,
})
} }
#[actix_web::test] #[actix_web::test]
@ -282,6 +286,7 @@ mod tests {
let new_config_json = serde_json::json!({ let new_config_json = serde_json::json!({
"hardwareOffsetMs": 55, "hardwareOffsetMs": 55,
"defaultNudgeMs": 2,
"timeturnerOffset": { "hours": 1, "minutes": 2, "seconds": 3, "frames": 4 } "timeturnerOffset": { "hours": 1, "minutes": 2, "seconds": 3, "frames": 4 }
}); });

View file

@ -13,7 +13,6 @@ use crate::config::watch_config;
use crate::serial_input::start_serial_thread; use crate::serial_input::start_serial_thread;
use crate::sync_logic::LtcState; use crate::sync_logic::LtcState;
use crate::ui::start_ui; use crate::ui::start_ui;
use chrono::TimeZone;
use clap::Parser; use clap::Parser;
use daemonize::Daemonize; use daemonize::Daemonize;

View file

@ -54,7 +54,7 @@ pub fn start_ui(
.map(|ifa| ifa.ip().to_string()) .map(|ifa| ifa.ip().to_string())
.collect(); .collect();
// 3⃣ jitter + Δ // 3⃣ jitter
{ {
let mut st = state.lock().unwrap(); let mut st = state.lock().unwrap();
if let Some(frame) = st.latest.clone() { if let Some(frame) = st.latest.clone() {
@ -64,33 +64,6 @@ pub fn start_ui(
let raw = (now_utc - frame.timestamp).num_milliseconds(); let raw = (now_utc - frame.timestamp).num_milliseconds();
let measured = raw - hw_offset_ms; let measured = raw - hw_offset_ms;
st.record_offset(measured); st.record_offset(measured);
// Δ = system clock - LTC timecode (use LOCAL time, with offset)
let today_local = Local::now().date_naive();
let ms = ((frame.frames as f64 / frame.frame_rate) * 1000.0).round() as u32;
let tc_naive = NaiveTime::from_hms_milli_opt(
frame.hours, frame.minutes, frame.seconds, ms,
).expect("Invalid LTC timecode");
let naive_dt_local = today_local.and_time(tc_naive);
let mut dt_local = Local
.from_local_datetime(&naive_dt_local)
.single()
.expect("Invalid local time");
// Apply timeturner offset before calculating delta
let offset = &cfg.timeturner_offset;
dt_local = dt_local
+ ChronoDuration::hours(offset.hours)
+ ChronoDuration::minutes(offset.minutes)
+ ChronoDuration::seconds(offset.seconds);
let frame_offset_ms = (offset.frames as f64 / frame.frame_rate * 1000.0).round() as i64;
dt_local = dt_local + ChronoDuration::milliseconds(frame_offset_ms);
let delta_ms = (Local::now() - dt_local).num_milliseconds();
st.record_clock_delta(delta_ms);
} else {
st.clear_offsets();
st.clear_clock_deltas();
} }
} }
} }
@ -103,7 +76,7 @@ pub fn start_ui(
st.average_frames(), st.average_frames(),
st.timecode_match().to_string(), st.timecode_match().to_string(),
st.lock_ratio(), st.lock_ratio(),
st.average_clock_delta(), st.get_ewma_clock_delta(),
) )
}; };