From facce4f096b5eec901e2f385e1b0fc6be44de2c1 Mon Sep 17 00:00:00 2001 From: arc-alex Date: Mon, 20 Nov 2023 17:44:39 +0100 Subject: [PATCH] trigger doRoll if clock is less than startAt --- apps/server/src/services/TimerService.ts | 2 +- .../src/services/__tests__/rollUtils.test.ts | 20 +++++++++++++++++++ apps/server/src/services/rollUtils.ts | 7 ++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/apps/server/src/services/TimerService.ts b/apps/server/src/services/TimerService.ts index 4f3714cc0..64c8ae577 100644 --- a/apps/server/src/services/TimerService.ts +++ b/apps/server/src/services/TimerService.ts @@ -339,7 +339,7 @@ export class TimerService { this.timer.expectedFinish >= this.timer.startedAt ? this.timer.expectedFinish : this.timer.expectedFinish + dayInMs, - + _startAt: this.timer.startedAt, clock: this.timer.clock, secondaryTimer: this.timer.secondaryTimer, secondaryTarget: this.secondaryTarget, diff --git a/apps/server/src/services/__tests__/rollUtils.test.ts b/apps/server/src/services/__tests__/rollUtils.test.ts index 329ece996..5622661c6 100644 --- a/apps/server/src/services/__tests__/rollUtils.test.ts +++ b/apps/server/src/services/__tests__/rollUtils.test.ts @@ -703,4 +703,24 @@ describe('typical scenarios', () => { expect(updateRoll(timers)).toStrictEqual(expected); }); + + it('rolls backwards', () => { + const timers = { + selectedEventId: '1', + current: 11, + _startAt: 10, + _finishAt: 15, + clock: 9, + secondaryTimer: null, + secondaryTarget: null, + }; + + const expected = { + updatedTimer: timers._finishAt - timers.clock, + updatedSecondaryTimer: null, + doRollLoad: true, + isFinished: false, + }; + expect(updateRoll(timers)).toStrictEqual(expected); + }); }); diff --git a/apps/server/src/services/rollUtils.ts b/apps/server/src/services/rollUtils.ts index 98a6feac2..b3c59c7f7 100644 --- a/apps/server/src/services/rollUtils.ts +++ b/apps/server/src/services/rollUtils.ts @@ -153,6 +153,7 @@ type CurrentTimers = { selectedEventId: string | null; current: number | null; _finishAt: number | null; + _startAt: number | null; clock: number | null; secondaryTimer: number | null; secondaryTarget: number | null; @@ -164,7 +165,7 @@ type CurrentTimers = { * @returns {object} object with selection variables */ export const updateRoll = (currentTimers: CurrentTimers) => { - const { selectedEventId, current, _finishAt, clock, secondaryTimer, secondaryTarget } = currentTimers; + const { selectedEventId, current, _finishAt, _startAt, clock, secondaryTimer, secondaryTarget } = currentTimers; // timers let updatedTimer = current; @@ -182,10 +183,14 @@ export const updateRoll = (currentTimers: CurrentTimers) => { updatedTimer -= dayInMs; } + console.log(Math.floor(_startAt / 1000), Math.floor(clock / 1000)); + if (updatedTimer < 0) { isPrimaryFinished = true; // we need a new event doRollLoad = true; + } else if (clock < _startAt) { + doRollLoad = true; } } else if (secondaryTimer >= 0) { // if secondaryTimer is running we are in waiting to roll