From eb2c4d078073556137adf5cbf6703bd2b068a3b9 Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Fri, 17 May 2024 22:38:31 +0200 Subject: [PATCH] refactor: recover day after indicator --- .../rundown/event-block/EventBlock.utils.ts | 16 +--------------- .../src/services/rundown-service/rundownCache.ts | 6 ++++-- apps/server/src/stores/runtimeState.ts | 2 +- packages/utils/index.ts | 3 +++ packages/utils/src/date-utils/checkIsNextDay.ts | 13 +++++++++++++ 5 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 packages/utils/src/date-utils/checkIsNextDay.ts diff --git a/apps/client/src/features/rundown/event-block/EventBlock.utils.ts b/apps/client/src/features/rundown/event-block/EventBlock.utils.ts index 86ddce331..b45750ac5 100644 --- a/apps/client/src/features/rundown/event-block/EventBlock.utils.ts +++ b/apps/client/src/features/rundown/event-block/EventBlock.utils.ts @@ -1,5 +1,5 @@ import { MaybeNumber } from 'ontime-types'; -import { dayInMs, millisToString, removeLeadingZero, removeTrailingZero } from 'ontime-utils'; +import { checkIsNextDay, dayInMs, millisToString, removeLeadingZero, removeTrailingZero } from 'ontime-utils'; export function formatDelay(timeStart: number, delay: number): string | undefined { if (!delay) return; @@ -10,20 +10,6 @@ export function formatDelay(timeStart: number, delay: number): string | undefine return `New start ${timeTag}`; } -/** - * Utility function checks whether a given event is the day after from its predecessor - * We consider an event to be the day after, if it begins before the start of the previous - * @example day after - * // 09:00 - 10:00 - * // 08:00 - 10:30 <--- day after - * @example same day - * // 09:00 - 10:00 - * // 09:30 - 10:30 <--- same day - */ -function checkIsNextDay(previousStart: number, timeStart: number): boolean { - return timeStart < previousStart; -} - export function formatOverlap( previousStart: MaybeNumber, previousEnd: MaybeNumber, diff --git a/apps/server/src/services/rundown-service/rundownCache.ts b/apps/server/src/services/rundown-service/rundownCache.ts index 852f5e951..e7392e198 100644 --- a/apps/server/src/services/rundown-service/rundownCache.ts +++ b/apps/server/src/services/rundown-service/rundownCache.ts @@ -9,7 +9,7 @@ import { OntimeRundown, OntimeRundownEntry, } from 'ontime-types'; -import { generateId, deleteAtIndex, insertAtIndex, reorderArray, swapEventData } from 'ontime-utils'; +import { generateId, deleteAtIndex, insertAtIndex, reorderArray, swapEventData, checkIsNextDay } from 'ontime-utils'; import { DataProvider } from '../../classes/data-provider/DataProvider.js'; import { createPatch } from '../../utils/parser.js'; @@ -85,6 +85,7 @@ export function generate( let accumulatedDelay = 0; let daySpan = 0; + let previousStart: MaybeNumber = null; let previousEnd: MaybeNumber = null; for (let i = 0; i < initialRundown.length; i++) { @@ -108,7 +109,7 @@ export function generate( lastEnd = updatedEvent.timeEnd; // check if we go over midnight, account for eventual gaps - const gapOverMidnight = previousEnd !== null && previousEnd > updatedEvent.timeStart; + const gapOverMidnight = previousStart !== null && checkIsNextDay(previousStart, updatedEvent.timeStart); const durationOverMidnight = updatedEvent.timeStart > updatedEvent.timeEnd; if (gapOverMidnight || durationOverMidnight) { daySpan++; @@ -128,6 +129,7 @@ export function generate( accumulatedDelay = Math.max(accumulatedDelay - gap, 0); } updatedEvent.delay = accumulatedDelay; + previousStart = updatedEvent.timeStart; previousEnd = updatedEvent.timeEnd; } diff --git a/apps/server/src/stores/runtimeState.ts b/apps/server/src/stores/runtimeState.ts index 36edb0bd5..24cd02d12 100644 --- a/apps/server/src/stores/runtimeState.ts +++ b/apps/server/src/stores/runtimeState.ts @@ -123,7 +123,7 @@ export function updateRundownData(rundownData: RundownData) { runtimeState.runtime.numEvents = rundownData.numEvents; runtimeState.runtime.plannedStart = rundownData.firstStart; - runtimeState.runtime.plannedEnd = rundownData.lastEnd; + runtimeState.runtime.plannedEnd = rundownData.firstStart + rundownData.totalDuration; runtimeState.runtime.expectedEnd = getExpectedEnd(runtimeState); } diff --git a/packages/utils/index.ts b/packages/utils/index.ts index c0e2cfebd..46a0012da 100644 --- a/packages/utils/index.ts +++ b/packages/utils/index.ts @@ -65,6 +65,9 @@ export { validateEndAction, validateTimerType } from './src/validate-events/vali // feature business logic +// feature business logic - rundown +export { checkIsNextDay } from './src/date-utils/checkIsNextDay.js'; + // feature business logic - spreadsheet import export { type ImportCustom, diff --git a/packages/utils/src/date-utils/checkIsNextDay.ts b/packages/utils/src/date-utils/checkIsNextDay.ts new file mode 100644 index 000000000..d0a590947 --- /dev/null +++ b/packages/utils/src/date-utils/checkIsNextDay.ts @@ -0,0 +1,13 @@ +/** + * Utility function checks whether a given event is the day after from its predecessor + * We consider an event to be the day after, if it begins before the start of the previous + * @example day after + * 09:00 - 10:00 + * 08:00 - 10:30 + * @example same day + * 09:00 - 10:00 + * 09:30 - 10:30 + */ +export function checkIsNextDay(previousStart: number, timeStart: number): boolean { + return timeStart <= previousStart; +}