From e6b4f537af47a1e9a71bcb8d07af8cbc00e30361 Mon Sep 17 00:00:00 2001 From: arc-alex Date: Wed, 22 Nov 2023 19:05:08 +0100 Subject: [PATCH] rollSkipLimit --- apps/server/src/config/config.js | 1 + .../src/services/__tests__/rollUtils.test.ts | 61 +++++++++++++++++++ apps/server/src/services/rollUtils.ts | 6 +- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/apps/server/src/config/config.js b/apps/server/src/config/config.js index f11da3cdc..42ec30e52 100644 --- a/apps/server/src/config/config.js +++ b/apps/server/src/config/config.js @@ -9,4 +9,5 @@ export const config = { filename: 'override.css', }, restoreFile: 'ontime.restore', + rollSkipLimit: 3 * 32, }; diff --git a/apps/server/src/services/__tests__/rollUtils.test.ts b/apps/server/src/services/__tests__/rollUtils.test.ts index 7c1b4a7c8..ced5f1adc 100644 --- a/apps/server/src/services/__tests__/rollUtils.test.ts +++ b/apps/server/src/services/__tests__/rollUtils.test.ts @@ -2,6 +2,7 @@ import { OntimeEvent } from 'ontime-types'; import { dayInMs } from 'ontime-utils'; import { getRollTimers, normaliseEndTime, sortArrayByProperty, updateRoll } from '../rollUtils.js'; +import { config } from '../../config/config.js'; // test sortArrayByProperty() describe('sort simple arrays of objects', () => { @@ -585,6 +586,66 @@ describe('typical scenarios', () => { expect(updateRoll(timers)).toStrictEqual(expected); }); + it('dose not skip isFinished under limit', () => { + const timers = { + selectedEventId: '1', + current: 13, + _finishAt: 15, + _startAt: 9, + clock: 14, + secondaryTimer: null, + secondaryTarget: null, + }; + + const expected = { + updatedTimer: timers._finishAt - timers.clock, + updatedSecondaryTimer: null, + doRollLoad: false, + isFinished: false, + }; + + expect(updateRoll(timers)).toStrictEqual(expected); + + // test that it can jump time + timers._finishAt = 14; + timers.clock += config.rollSkipLimit - 1; + expected.updatedTimer = timers._finishAt - timers.clock; + expected.doRollLoad = true; + expected.isFinished = true; + + expect(updateRoll(timers)).toStrictEqual(expected); + }); + + it('dose skips isFinished over limit', () => { + const timers = { + selectedEventId: '1', + current: 13, + _finishAt: 15, + _startAt: 9, + clock: 14, + secondaryTimer: null, + secondaryTarget: null, + }; + + const expected = { + updatedTimer: timers._finishAt - timers.clock, + updatedSecondaryTimer: null, + doRollLoad: false, + isFinished: false, + }; + + expect(updateRoll(timers)).toStrictEqual(expected); + + // test that it can jump time + timers._finishAt = 14; + timers.clock += config.rollSkipLimit + 1; + expected.updatedTimer = timers._finishAt - timers.clock; + expected.doRollLoad = true; + expected.isFinished = false; + + expect(updateRoll(timers)).toStrictEqual(expected); + }); + it('it updates secondary timer', () => { const timers = { selectedEventId: null, diff --git a/apps/server/src/services/rollUtils.ts b/apps/server/src/services/rollUtils.ts index 1e82eecb4..67c7363fa 100644 --- a/apps/server/src/services/rollUtils.ts +++ b/apps/server/src/services/rollUtils.ts @@ -1,5 +1,6 @@ import { OntimeEvent } from 'ontime-types'; import { dayInMs } from 'ontime-utils'; +import { config } from '../config/config.js'; /** * handle events that span over midnight @@ -167,6 +168,7 @@ type CurrentTimers = { export const updateRoll = (currentTimers: CurrentTimers) => { const { selectedEventId, current, _finishAt, _startAt, clock, secondaryTimer, secondaryTarget } = currentTimers; + console.log(currentTimers); // timers let updatedTimer = current; let updatedSecondaryTimer = secondaryTimer; @@ -183,12 +185,12 @@ export const updateRoll = (currentTimers: CurrentTimers) => { updatedTimer -= dayInMs; } - if (updatedTimer < 0) { - isPrimaryFinished = true; + if (Math.abs(updatedTimer) < config.rollSkipLimit) isPrimaryFinished = true; //Dont trigger Finished if we are over the skip limit // we need a new event doRollLoad = true; } else if (clock < _startAt) { + // we have rolled back befor this evet start so we need a new one doRollLoad = true; } } else if (secondaryTimer >= 0) {