From 7cefe0759458d327e26dfc0b3312449595ed2354 Mon Sep 17 00:00:00 2001 From: Carlos Valente Date: Mon, 20 May 2024 19:59:37 +0200 Subject: [PATCH] refactor: cap added time --- .../src/features/control/playback/add-time/AddTime.tsx | 5 +++-- .../server/src/api-integration/integration.controller.ts | 9 ++++++++- apps/server/src/api-integration/integration.utils.ts | 3 +-- packages/utils/index.ts | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/client/src/features/control/playback/add-time/AddTime.tsx b/apps/client/src/features/control/playback/add-time/AddTime.tsx index 4f5c236bd..f2987b29b 100644 --- a/apps/client/src/features/control/playback/add-time/AddTime.tsx +++ b/apps/client/src/features/control/playback/add-time/AddTime.tsx @@ -2,7 +2,7 @@ import { Tooltip } from '@chakra-ui/react'; import { IoAdd } from '@react-icons/all-files/io5/IoAdd'; import { IoRemove } from '@react-icons/all-files/io5/IoRemove'; import { Playback } from 'ontime-types'; -import { MILLIS_PER_SECOND } from 'ontime-utils'; +import { MILLIS_PER_HOUR, MILLIS_PER_SECOND } from 'ontime-utils'; import TimeInput from '../../../../common/components/input/time-input/TimeInput'; import { useLocalStorage } from '../../../../common/hooks/useLocalStorage'; @@ -23,7 +23,8 @@ export default function AddTime(props: AddTimeProps) { const handleTimeChange = (_field: string, value: string) => { const newTime = forgivingStringToMillis(value); - setTime(newTime); + // cap add time to 1 hour + setTime(Math.min(newTime, MILLIS_PER_HOUR)); }; const handleAddTime = (direction: 'add' | 'remove') => { diff --git a/apps/server/src/api-integration/integration.controller.ts b/apps/server/src/api-integration/integration.controller.ts index 0b5432a9e..57a8dc7f7 100644 --- a/apps/server/src/api-integration/integration.controller.ts +++ b/apps/server/src/api-integration/integration.controller.ts @@ -1,4 +1,5 @@ import { DeepPartial, MessageState, OntimeEvent, SimpleDirection, SimplePlayback } from 'ontime-types'; +import { MILLIS_PER_HOUR, MILLIS_PER_SECOND } from 'ontime-utils'; import { ONTIME_VERSION } from '../ONTIME_VERSION.js'; import { auxTimerService } from '../services/aux-timer-service/AuxTimerService.js'; @@ -177,7 +178,13 @@ const actionHandlers: Record = { if (time === 0) { return { payload: 'success' }; } - runtimeService.addTime(time * 1000); //frontend is seconds based + + const timeToAdd = time * MILLIS_PER_SECOND; // frontend is seconds based + if (Math.abs(timeToAdd) > MILLIS_PER_HOUR) { + throw new Error(`Payload too large: ${time}`); + } + + runtimeService.addTime(timeToAdd); return { payload: 'success' }; }, /* Extra timers */ diff --git a/apps/server/src/api-integration/integration.utils.ts b/apps/server/src/api-integration/integration.utils.ts index 832d35020..3134c20fc 100644 --- a/apps/server/src/api-integration/integration.utils.ts +++ b/apps/server/src/api-integration/integration.utils.ts @@ -1,11 +1,10 @@ import { OntimeEvent, isKeyOfType, isOntimeEvent } from 'ontime-types'; -import { MILLIS_PER_SECOND } from 'ontime-utils'; +import { MILLIS_PER_SECOND, maxDuration } from 'ontime-utils'; import { DataProvider } from '../classes/data-provider/DataProvider.js'; import { editEvent } from '../services/rundown-service/RundownService.js'; import { getEventWithId } from '../services/rundown-service/rundownUtils.js'; import { coerceBoolean, coerceColour, coerceNumber, coerceString } from '../utils/coerceType.js'; -import { maxDuration } from '../../../../packages/utils/src/date-utils/conversionUtils.js'; const whitelistedPayload = { title: coerceString, diff --git a/packages/utils/index.ts b/packages/utils/index.ts index 599baeb1e..8296b10b2 100644 --- a/packages/utils/index.ts +++ b/packages/utils/index.ts @@ -29,6 +29,7 @@ export { // time format utils export { dayInMs, + maxDuration, MILLIS_PER_HOUR, MILLIS_PER_MINUTE, MILLIS_PER_SECOND,