mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-19 06:04:05 +00:00
add warning and danger transitions as timer life cycle events (#1071)
* setup detection of TImerPhase changes * add integration event for transition to warning * add integration event for transition to danger --------- Co-authored-by: Carlos Valente <34649812+cpvalente@users.noreply.github.com>
This commit is contained in:
@@ -14,4 +14,6 @@ export const cycles: CycleLabel[] = [
|
|||||||
{ id: 5, label: 'Every second', value: 'onClock' },
|
{ id: 5, label: 'Every second', value: 'onClock' },
|
||||||
{ id: 5, label: 'On Timer Update', value: 'onUpdate' },
|
{ id: 5, label: 'On Timer Update', value: 'onUpdate' },
|
||||||
{ id: 6, label: 'On Finish', value: 'onFinish' },
|
{ id: 6, label: 'On Finish', value: 'onFinish' },
|
||||||
|
{ id: 7, label: 'On Warning', value: 'onWarning' },
|
||||||
|
{ id: 8, label: 'On Danger', value: 'onDanger' },
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,4 +1,13 @@
|
|||||||
import { EndAction, LogOrigin, MaybeNumber, OntimeEvent, Playback, RuntimeStore, TimerLifeCycle } from 'ontime-types';
|
import {
|
||||||
|
EndAction,
|
||||||
|
LogOrigin,
|
||||||
|
MaybeNumber,
|
||||||
|
OntimeEvent,
|
||||||
|
Playback,
|
||||||
|
RuntimeStore,
|
||||||
|
TimerLifeCycle,
|
||||||
|
TimerPhase,
|
||||||
|
} from 'ontime-types';
|
||||||
import { millisToString, validatePlayback } from 'ontime-utils';
|
import { millisToString, validatePlayback } from 'ontime-utils';
|
||||||
|
|
||||||
import { deepEqual } from 'fast-equals';
|
import { deepEqual } from 'fast-equals';
|
||||||
@@ -93,6 +102,25 @@ class RuntimeService {
|
|||||||
const rundown = getPlayableEvents();
|
const rundown = getPlayableEvents();
|
||||||
this.eventTimer.roll(rundown);
|
this.eventTimer.roll(rundown);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const timerPhaseChanged = RuntimeService.previousState.timer?.phase !== newState.timer.phase;
|
||||||
|
|
||||||
|
if (timerPhaseChanged) {
|
||||||
|
switch (newState.timer.phase) {
|
||||||
|
case TimerPhase.Warning:
|
||||||
|
process.nextTick(() => {
|
||||||
|
integrationService.dispatch(TimerLifeCycle.onWarning);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case TimerPhase.Danger:
|
||||||
|
process.nextTick(() => {
|
||||||
|
integrationService.dispatch(TimerLifeCycle.onDanger);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** delay initialisation until we have a restore point */
|
/** delay initialisation until we have a restore point */
|
||||||
|
|||||||
@@ -645,6 +645,8 @@ describe('test import of v2 datamodel', () => {
|
|||||||
onStop: [],
|
onStop: [],
|
||||||
onUpdate: [],
|
onUpdate: [],
|
||||||
onFinish: [],
|
onFinish: [],
|
||||||
|
onWarning: [],
|
||||||
|
onDanger: [],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
http: {
|
http: {
|
||||||
|
|||||||
@@ -33,6 +33,8 @@ describe('sanitiseOscSubscriptions()', () => {
|
|||||||
{ id: '4', cycle: 'onStop', address: '/test', payload: 'test', enabled: false },
|
{ id: '4', cycle: 'onStop', address: '/test', payload: 'test', enabled: false },
|
||||||
{ id: '5', cycle: 'onUpdate', address: '/test', payload: 'test', enabled: true },
|
{ id: '5', cycle: 'onUpdate', address: '/test', payload: 'test', enabled: true },
|
||||||
{ id: '6', cycle: 'onFinish', address: '/test', payload: 'test', enabled: false },
|
{ id: '6', cycle: 'onFinish', address: '/test', payload: 'test', enabled: false },
|
||||||
|
{ id: '7', cycle: 'onWarning', address: '/test', payload: 'test', enabled: false },
|
||||||
|
{ id: '8', cycle: 'onDanger', address: '/test', payload: 'test', enabled: false },
|
||||||
];
|
];
|
||||||
const sanitationResult = sanitiseOscSubscriptions(oscSubscriptions);
|
const sanitationResult = sanitiseOscSubscriptions(oscSubscriptions);
|
||||||
expect(sanitationResult).toStrictEqual(oscSubscriptions);
|
expect(sanitationResult).toStrictEqual(oscSubscriptions);
|
||||||
@@ -69,6 +71,8 @@ describe('sanitiseHttpSubscriptions()', () => {
|
|||||||
{ id: '4', cycle: 'onStop', message: 'http://test', enabled: false },
|
{ id: '4', cycle: 'onStop', message: 'http://test', enabled: false },
|
||||||
{ id: '5', cycle: 'onUpdate', message: 'http://test', enabled: true },
|
{ id: '5', cycle: 'onUpdate', message: 'http://test', enabled: true },
|
||||||
{ id: '6', cycle: 'onFinish', message: 'http://test', enabled: false },
|
{ id: '6', cycle: 'onFinish', message: 'http://test', enabled: false },
|
||||||
|
{ id: '7', cycle: 'onWarning', message: 'http://test', enabled: false },
|
||||||
|
{ id: '8', cycle: 'onDanger', message: 'http://test', enabled: false },
|
||||||
];
|
];
|
||||||
const sanitationResult = sanitiseHttpSubscriptions(httpSubscription);
|
const sanitationResult = sanitiseHttpSubscriptions(httpSubscription);
|
||||||
expect(sanitationResult).toStrictEqual(httpSubscription);
|
expect(sanitationResult).toStrictEqual(httpSubscription);
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ export enum TimerLifeCycle {
|
|||||||
onClock = 'onClock',
|
onClock = 'onClock',
|
||||||
onUpdate = 'onUpdate',
|
onUpdate = 'onUpdate',
|
||||||
onFinish = 'onFinish',
|
onFinish = 'onFinish',
|
||||||
|
onWarning = 'onWarning',
|
||||||
|
onDanger = 'onDanger',
|
||||||
}
|
}
|
||||||
|
|
||||||
export type TimerLifeCycleKey = keyof typeof TimerLifeCycle;
|
export type TimerLifeCycleKey = keyof typeof TimerLifeCycle;
|
||||||
|
|||||||
Reference in New Issue
Block a user