V2 fix socket (#296)

* refactor: rename timer endpoint

* refactor: typescript

* refactor: rename eventData and viewSettings

* refactor: message manager uses event store
This commit is contained in:
Carlos Valente
2023-02-24 22:47:07 +01:00
committed by GitHub
parent 03552056cb
commit edac1d7f75
102 changed files with 836 additions and 715 deletions
+3 -8
View File
@@ -3,7 +3,8 @@
*/
import { socketProvider } from '../classes/socket/SocketController.js';
import { eventLoader, EventLoader } from '../classes/event-loader/EventLoader.js';
import { eventTimer, TimerService } from './TimerService.ts';
import { eventTimer, TimerService } from './TimerService.js';
import { eventStore } from '../stores/EventStore.js';
/**
* Service manages playback status of app
@@ -26,7 +27,7 @@ export class PlaybackService {
eventTimer.load(event);
success = true;
}
socketProvider.broadcastState();
eventStore.broadcast();
return success;
}
@@ -123,7 +124,6 @@ export class PlaybackService {
const newState = eventTimer.playback;
socketProvider.info('PLAYBACK', `Play Mode ${newState.toUpperCase()}`);
}
socketProvider.broadcastState();
}
/**
@@ -135,7 +135,6 @@ export class PlaybackService {
const newState = eventTimer.playback;
socketProvider.info('PLAYBACK', `Play Mode ${newState.toUpperCase()}`);
}
socketProvider.broadcastState();
}
/**
@@ -148,7 +147,6 @@ export class PlaybackService {
const newState = eventTimer.playback;
socketProvider.info('PLAYBACK', `Play Mode ${newState.toUpperCase()}`);
}
socketProvider.broadcastState();
}
/**
@@ -158,7 +156,6 @@ export class PlaybackService {
if (eventLoader.selectedEventId) {
this.loadById(eventLoader.selectedEventId);
}
socketProvider.broadcastState();
}
/**
@@ -186,7 +183,6 @@ export class PlaybackService {
const newState = eventTimer.playback;
socketProvider.info('PLAYBACK', `Play Mode ${newState.toUpperCase()}`);
socketProvider.broadcastState();
}
}
@@ -200,6 +196,5 @@ export class PlaybackService {
eventTimer.delay(delayInMs);
socketProvider.info('PLAYBACK', `Added ${delayTime} min delay`);
}
socketProvider.broadcastState();
}
}
@@ -1,21 +1,16 @@
import { OntimeBaseEvent, OntimeBlock, OntimeDelay, OntimeEvent } from 'ontime-types';
import { generateId } from 'ontime-utils';
import { DataProvider } from '../classes/data-provider/DataProvider.ts';
import {
block as blockDef,
delay as delayDef,
event as eventDef,
} from '../models/eventsDefinition.js';
import { DataProvider } from '../classes/data-provider/DataProvider.js';
import { block as blockDef, delay as delayDef, event as eventDef } from '../models/eventsDefinition.js';
import { MAX_EVENTS } from '../settings.js';
import { EventLoader, eventLoader } from '../classes/event-loader/EventLoader.js';
import { eventTimer } from './TimerService.ts';
import { socketProvider } from '../classes/socket/SocketController.js';
import { eventTimer } from './TimerService.js';
import { eventStore } from '../stores/EventStore.js';
/**
*
* @param affectedIds
* @returns boolean
* Checks if a list of IDs is in the current selection
*/
const affectedLoaded = (affectedIds) => {
const affectedLoaded = (affectedIds: string[]) => {
const now = eventLoader.selectedEventId;
const nowPublic = eventLoader.selectedPublicEventId;
const next = eventLoader.nextEventId;
@@ -28,6 +23,9 @@ const affectedLoaded = (affectedIds) => {
);
};
/**
* Checks if timer replaces the loaded next
*/
const isNewNext = () => {
const timedEvents = EventLoader.getTimedEvents();
const now = eventLoader.selectedEventId;
@@ -66,10 +64,9 @@ const isNewNext = () => {
};
/**
* updates timer object
* @param {array} [affectedIds]
* Updates timer object
*/
export function updateTimer(affectedIds) {
export function updateTimer(affectedIds?: string[]) {
const runningEventId = eventLoader.selectedEventId;
if (runningEventId === null) {
@@ -121,18 +118,18 @@ export async function addEvent(eventData) {
throw new Error(`ERROR: Reached limit number of ${MAX_EVENTS} events`);
}
let newEvent = {};
let newEvent: Partial<OntimeBaseEvent> = {};
const id = generateId();
switch (eventData.type) {
case 'event':
newEvent = { ...eventDef, ...eventData, id };
newEvent = { ...eventDef, ...eventData, id } as Partial<OntimeEvent>;
break;
case 'delay':
newEvent = { ...delayDef, ...eventData, id };
newEvent = { ...delayDef, ...eventData, id } as Partial<OntimeDelay>;
break;
case 'block':
newEvent = { ...blockDef, ...eventData, id };
newEvent = { ...blockDef, ...eventData, id } as Partial<OntimeBlock>;
break;
}
@@ -148,7 +145,7 @@ export async function addEvent(eventData) {
throw new Error(error);
}
updateTimer([id]);
socketProvider.broadcastState();
eventStore.broadcast();
return newEvent;
}
@@ -160,7 +157,7 @@ export async function editEvent(eventData) {
}
const newEvent = await DataProvider.updateEventById(eventId, eventData);
updateTimer([eventId]);
socketProvider.broadcastState();
eventStore.broadcast();
return newEvent;
}
@@ -172,7 +169,7 @@ export async function editEvent(eventData) {
export async function deleteEvent(eventId) {
await DataProvider.deleteEvent(eventId);
updateTimer([eventId]);
socketProvider.broadcastState();
eventStore.broadcast();
}
/**
@@ -182,7 +179,7 @@ export async function deleteEvent(eventId) {
export async function deleteAllEvents() {
await DataProvider.clearRundown();
updateTimer();
socketProvider.broadcastState();
eventStore.broadcast();
}
/**
@@ -263,5 +260,5 @@ export async function applyDelay(eventId) {
// update rundown
await DataProvider.setRundown(rundown);
updateTimer();
socketProvider.broadcastState();
eventStore.broadcast();
}
+15 -15
View File
@@ -1,6 +1,6 @@
import { TimerLifeCycle } from 'ontime-types';
import { runtimeState } from '../stores/EventStore.js';
import { eventStore } from '../stores/EventStore.js';
import { PlaybackService } from './PlaybackService.js';
import { updateRoll } from './rollUtils.js';
import { DAY_TO_MS } from '../utils/time.js';
@@ -9,9 +9,9 @@ import { integrationService } from './integration-service/IntegrationService.js'
export class TimerService {
private readonly _interval: NodeJS.Timer;
private playback: string;
playback: string;
private loadedTimerId: null;
loadedTimerId: null;
private _pausedInterval: number;
private _pausedAt: number | null;
private _secondaryTarget: number | null;
@@ -163,8 +163,8 @@ export class TimerService {
* @private
*/
_onLoad() {
runtimeState.set('playback', this.playback);
runtimeState.set('ontime-timer', this.timer);
eventStore.set('playback', this.playback);
eventStore.set('timer', this.timer);
integrationService.dispatch(TimerLifeCycle.onLoad);
}
@@ -198,8 +198,8 @@ export class TimerService {
* @private
*/
_onStart() {
runtimeState.set('playback', this.playback);
runtimeState.set('ontime-timer', this.timer);
eventStore.set('playback', this.playback);
eventStore.set('timer', this.timer);
integrationService.dispatch(TimerLifeCycle.onStart);
}
@@ -215,8 +215,8 @@ export class TimerService {
}
_onPause() {
runtimeState.set('playback', this.playback);
runtimeState.set('ontime-timer', this.timer);
eventStore.set('playback', this.playback);
eventStore.set('timer', this.timer);
integrationService.dispatch(TimerLifeCycle.onPause);
}
@@ -230,8 +230,8 @@ export class TimerService {
}
_onStop() {
runtimeState.set('playback', this.playback);
runtimeState.set('ontime-timer', this.timer);
eventStore.set('playback', this.playback);
eventStore.set('timer', this.timer);
integrationService.dispatch(TimerLifeCycle.onStop);
}
@@ -318,14 +318,14 @@ export class TimerService {
}
_onUpdate() {
runtimeState.set('playback', this.playback);
runtimeState.set('ontime-timer', this.timer);
eventStore.set('playback', this.playback);
eventStore.set('timer', this.timer);
integrationService.dispatch(TimerLifeCycle.onUpdate);
}
_onFinish() {
runtimeState.set('playback', this.playback);
runtimeState.set('ontime-timer', this.timer);
eventStore.set('playback', this.playback);
eventStore.set('timer', this.timer);
integrationService.dispatch(TimerLifeCycle.onFinish);
}
@@ -1,5 +1,5 @@
import IIntegration, { TimerLifeCycleKey } from './IIntegration.js';
import { runtimeState } from '../../stores/EventStore.js';
import { eventStore } from '../../stores/EventStore.js';
class IntegrationService {
private integrations: IIntegration[];
@@ -17,7 +17,7 @@ class IntegrationService {
}
dispatch(action: TimerLifeCycleKey) {
const state = runtimeState.poll();
const state = eventStore.poll();
this.integrations.forEach((integration) => {
integration.dispatch(action, state);
});
@@ -1,16 +1,12 @@
/**
* Utility variable: 24 hour in milliseconds .
* @type {number}
*/
export const DAY_TO_MS = 86400000;
/**
* @description handle events that span over midnight
* @param {number} start - When does the event start
* @param {number} end - When does the event end
* @returns {number} normalised time
* handle events that span over midnight
*/
export const normaliseEndTime = (start, end) => (end < start ? end + DAY_TO_MS : end);
export const normaliseEndTime = (start: number, end: number) => (end < start ? end + DAY_TO_MS : end);
/**
* @description Sorts an array of objects by given property
@@ -45,15 +41,15 @@ export const replacePlaceholder = (str, values) => {
* @param timeNow
* @returns {{}}
*/
export const getRollTimers = (rundown, timeNow) => {
let nowIndex = null; // index of event now
let nowId = null; // id of event now
let publicIndex = null; // index of public event now
export const getRollTimers = (rundown, timeNow: number) => {
let nowIndex: number | null = null; // index of event now
let nowId: string | null = null; // id of event now
let publicIndex: string | null = null; // index of public event now
let publicTime = -1;
let nextIndex = null; // index of next event
let publicNextIndex = null; // index of next public event
let timeToNext = null; // counter: time for next event
let publicTimeToNext = null; // counter: time for next public event
let nextIndex: number | null = null; // index of next event
let publicNextIndex: number | null = null; // index of next public event
let timeToNext: number | null = null; // counter: time for next event
let publicTimeToNext: number | null = null; // counter: time for next public event
let timers = null;
// Order events by startTime
@@ -171,8 +167,7 @@ export const getRollTimers = (rundown, timeNow) => {
* @returns {object} object with selection variables
*/
export const updateRoll = (currentTimers) => {
const { selectedEventId, current, _finishAt, clock, secondaryTimer, _secondaryTarget } =
currentTimers;
const { selectedEventId, current, _finishAt, clock, secondaryTimer, _secondaryTarget } = currentTimers;
// timers
let updatedTimer = current;