mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-16 21:03:29 +00:00
refactor: v2 event loader (#260)
* refactor: extract jest config * refactor: rename params in reoder endpoint * refactor: avoid app exports * refactor: small code smells * refactor: run development server * refactor: extract rundown service and event loader logic * refactor: rename events > rundown * refactor: code style * fix: handle external change of title * refactor: cleanup dictionary * refactor: rename MessageService * refactor: use eventID for operations * refactor: migrate OSC controller to service * refactor: migrate Socket controller to service * refactor: migrate HTTP controller to service * refactor: extract logic into discrete services * refactor: remove rundown from event timer * refactor: remove duplicate * refactor: remove unused * chore: update tests
This commit is contained in:
@@ -0,0 +1,198 @@
|
||||
/**
|
||||
* starts loaded timer
|
||||
*/
|
||||
import { socketProvider } from '../classes/socket/SocketController.js';
|
||||
import { eventLoader, EventLoader } from '../classes/event-loader/EventLoader.js';
|
||||
|
||||
/**
|
||||
* Service manages playback status of app
|
||||
* Coordinating with necessary services
|
||||
*/
|
||||
export class PlaybackService {
|
||||
/**
|
||||
* makes calls for loading and starting given event
|
||||
* @param {object} event
|
||||
* @return {boolean} success
|
||||
*/
|
||||
static loadEvent(event) {
|
||||
if (!event) {
|
||||
socketProvider.error('PLAYBACK', 'No event found');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (event.skip) {
|
||||
socketProvider.warning('PLAYBACK', `Refused playback of skipped event ID ${event.id}`);
|
||||
return false;
|
||||
}
|
||||
global.timer.pause();
|
||||
global.timer.loadEvent(event);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* starts event matching given ID
|
||||
* @param {string} eventId
|
||||
* @return {boolean} success
|
||||
*/
|
||||
static startById(eventId) {
|
||||
const event = EventLoader.getEventWithId(eventId);
|
||||
const success = PlaybackService.loadEvent(event);
|
||||
if (success) {
|
||||
socketProvider.info('PLAYBACK', `Loaded event with ID ${event.id}`);
|
||||
PlaybackService.start();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* starts an event at index
|
||||
* @param {number} eventIndex
|
||||
* @return {boolean} success
|
||||
*/
|
||||
static startByIndex(eventIndex) {
|
||||
const event = EventLoader.getEventAtIndex(eventIndex);
|
||||
const success = PlaybackService.loadEvent(event);
|
||||
if (success) {
|
||||
socketProvider.info('PLAYBACK', `Loaded event with ID ${event.id}`);
|
||||
PlaybackService.start();
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* loads event matching given ID
|
||||
* @param {string} eventId
|
||||
* @return {boolean} success
|
||||
*/
|
||||
static loadById(eventId) {
|
||||
const event = EventLoader.getEventWithId(eventId);
|
||||
const success = PlaybackService.loadEvent(event);
|
||||
if (success) {
|
||||
socketProvider.info('PLAYBACK', `Loaded event with ID ${event.id}`);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* loads event matching given ID
|
||||
* @param {number} eventIndex
|
||||
* @return {boolean} success
|
||||
*/
|
||||
static loadByIndex(eventIndex) {
|
||||
const event = EventLoader.getEventAtIndex(eventIndex);
|
||||
const success = PlaybackService.loadEvent(event);
|
||||
if (success) {
|
||||
socketProvider.info('PLAYBACK', `Loaded event with ID ${event.id}`);
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads event before currently selected
|
||||
*/
|
||||
static loadPrevious() {
|
||||
const previousEvent = eventLoader.findPrevious();
|
||||
if (previousEvent) {
|
||||
PlaybackService.loadById(previousEvent.id);
|
||||
global.timer.previous();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads event after currently selected
|
||||
*/
|
||||
static loadNext() {
|
||||
const nextEvent = eventLoader.findNext();
|
||||
if (nextEvent) {
|
||||
PlaybackService.loadById(nextEvent.id);
|
||||
global.timer.next();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts playback on selected event
|
||||
*/
|
||||
static start() {
|
||||
if (!eventLoader.selectedEventId) {
|
||||
return;
|
||||
}
|
||||
const newState = global.timer.start();
|
||||
if (newState === 'start') {
|
||||
socketProvider.info('PLAYBACK', 'Play Mode Start');
|
||||
}
|
||||
socketProvider.send('playstate', newState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pauses playback on selected event
|
||||
*/
|
||||
static pause() {
|
||||
if (!eventLoader.selectedEventId) {
|
||||
return;
|
||||
}
|
||||
const newState = global.timer.pause();
|
||||
if (newState === 'pause') {
|
||||
socketProvider.info('PLAYBACK', 'Play Mode Paused');
|
||||
}
|
||||
socketProvider.send('playstate', newState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops timer and unloads any events
|
||||
*/
|
||||
static stop() {
|
||||
if (!eventLoader.selectedEventId && global.timer.state !== 'roll') {
|
||||
return;
|
||||
}
|
||||
eventLoader.reset();
|
||||
const newState = global.timer.stop();
|
||||
if (newState === 'stop') {
|
||||
socketProvider.info('PLAYBACK', 'Play Mode Stopped');
|
||||
}
|
||||
socketProvider.send('playstate', newState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reloads current event
|
||||
*/
|
||||
static reload() {
|
||||
if (!eventLoader.selectedEventId) {
|
||||
return;
|
||||
}
|
||||
const newState = global.timer.reload();
|
||||
socketProvider.info('PLAYBACK', 'Reloaded event');
|
||||
socketProvider.send('playstate', newState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets playback to roll
|
||||
*/
|
||||
static roll() {
|
||||
if (!EventLoader.getNumEvents()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (global.timer.state === 'roll') {
|
||||
return;
|
||||
}
|
||||
|
||||
const newState = global.timer.roll();
|
||||
if (newState === 'roll') {
|
||||
socketProvider.info('PLAYBACK', 'Play Mode Roll');
|
||||
}
|
||||
socketProvider.send('playstate', newState);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds delay to current event
|
||||
* @param {number} delayTime time in ms
|
||||
*/
|
||||
static setDelay(delayTime) {
|
||||
if (!eventLoader.selectedEventId) {
|
||||
return;
|
||||
}
|
||||
const delayInMs = delayTime * 1000 * 60;
|
||||
global.timer.increment(delayInMs);
|
||||
socketProvider.info('PLAYBACK', `Added ${delayTime} min delay`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user