diff --git a/src/sync_logic.rs b/src/sync_logic.rs index aec434e..04bbadc 100644 --- a/src/sync_logic.rs +++ b/src/sync_logic.rs @@ -32,6 +32,7 @@ impl LtcFrame { /// Compare just HH:MM:SS against local time. pub fn matches_system_time(&self) -> bool { let local = Local::now(); + // We only compare hours, minutes and seconds - frames are not considered in this comparison local.hour() == self.hours && local.minute() == self.minutes && local.second() == self.seconds diff --git a/static/script.js b/static/script.js index ba997a4..ccca735 100644 --- a/static/script.js +++ b/static/script.js @@ -101,22 +101,22 @@ document.addEventListener('DOMContentLoaded', () => { let s = parseInt(tcParts[2], 10); let f = parseInt(tcParts[3], 10); + const frameRateInt = Math.round(frameRate); const msPerFrame = 1000.0 / frameRate; const elapsedFrames = Math.floor(elapsedMs / msPerFrame); - f += elapsedFrames; + // Compute total seconds including fractional part + let totalSeconds = h * 3600 + m * 60 + s + f / frameRateInt; + totalSeconds += elapsedMs / 1000.0; - const frameRateInt = Math.round(frameRate); - - s += Math.floor(f / frameRateInt); - f %= frameRateInt; - - m += Math.floor(s / 60); - s %= 60; - - h += Math.floor(m / 60); - m %= 60; + // Convert back to components + let newSeconds = Math.floor(totalSeconds); + f = Math.round((totalSeconds - newSeconds) * frameRateInt) % frameRateInt; + h = Math.floor(newSeconds / 3600); + newSeconds %= 3600; + m = Math.floor(newSeconds / 60); + s = Math.floor(newSeconds % 60); h %= 24; statusElements.ltcTimecode.textContent =