External field (#580)

* feat: add external endpoint

* add external to messagecontrol

---------

Co-authored-by: Carlos Valente <carlosvalente@pm.me>
This commit is contained in:
Alex Christoffer Rasmussen
2023-11-22 08:06:48 +01:00
committed by GitHub
parent c4886a617c
commit 797a0edf57
18 changed files with 229 additions and 49 deletions
@@ -1,7 +1,9 @@
import { Message } from 'ontime-types';
import { eventStore } from '../../stores/EventStore.js';
import { TimerMessage } from 'ontime-types/src/definitions/runtime/MessageControl.type.js';
import { throttle } from '../../utils/throttle.js';
import type { PublishFn } from '../../stores/EventStore.js';
let instance;
@@ -9,8 +11,12 @@ class MessageService {
timerMessage: TimerMessage;
publicMessage: Message;
lowerMessage: Message;
externalMessage: Message;
onAir: boolean;
private throttledSet: PublishFn;
private publish: PublishFn | null;
constructor() {
if (instance) {
throw new Error('There can be only one');
@@ -36,7 +42,40 @@ class MessageService {
visible: false,
};
this.externalMessage = {
text: '',
visible: false,
};
this.onAir = false;
this.throttledSet = () => {
throw new Error('Published called before initialisation');
};
}
init(publish: PublishFn) {
this.publish = publish;
this.throttledSet = throttle((key, value) => this.publish(key, value), 100);
}
/**
* @description sets message on stage timer screen
*/
setExternalText(payload: string) {
if (this.externalMessage.text !== payload) {
this.externalMessage.text = payload;
this.throttledSet('externalMessage', this.externalMessage);
}
return this.getAll();
}
/**
* @description sets message visibility on stage timer screen
*/
setExternalVisibility(status: boolean) {
this.externalMessage.visible = status;
this.throttledSet('externalMessage', this.externalMessage);
return this.getAll();
}
/**
@@ -44,7 +83,7 @@ class MessageService {
*/
setTimerText(payload: string) {
this.timerMessage.text = payload;
eventStore.set('timerMessage', this.timerMessage);
this.throttledSet('timerMessage', this.timerMessage);
return this.getAll();
}
@@ -53,7 +92,7 @@ class MessageService {
*/
setTimerVisibility(status: boolean) {
this.timerMessage.visible = status;
eventStore.set('timerMessage', this.timerMessage);
this.throttledSet('timerMessage', this.timerMessage);
return this.getAll();
}
@@ -62,7 +101,7 @@ class MessageService {
*/
setPublicText(payload: string) {
this.publicMessage.text = payload;
eventStore.set('publicMessage', this.publicMessage);
this.throttledSet('publicMessage', this.publicMessage);
return this.getAll();
}
@@ -71,7 +110,7 @@ class MessageService {
*/
setPublicVisibility(status: boolean) {
this.publicMessage.visible = status;
eventStore.set('publicMessage', this.publicMessage);
this.throttledSet('publicMessage', this.publicMessage);
return this.getAll();
}
@@ -80,7 +119,7 @@ class MessageService {
*/
setLowerText(payload: string) {
this.lowerMessage.text = payload;
eventStore.set('lowerMessage', this.lowerMessage);
this.throttledSet('lowerMessage', this.lowerMessage);
return this.getAll();
}
@@ -89,7 +128,7 @@ class MessageService {
*/
setLowerVisibility(status: boolean) {
this.lowerMessage.visible = status;
eventStore.set('lowerMessage', this.lowerMessage);
this.throttledSet('lowerMessage', this.lowerMessage);
return this.getAll();
}
@@ -102,7 +141,7 @@ class MessageService {
} else {
this.onAir = status;
}
eventStore.set('onAir', this.onAir);
this.throttledSet('onAir', this.onAir);
return this.getAll();
}
@@ -116,7 +155,7 @@ class MessageService {
} else {
this.timerMessage.timerBlink = status;
}
eventStore.set('timerMessage', this.timerMessage);
this.throttledSet('timerMessage', this.timerMessage);
return this.getAll();
}
@@ -130,7 +169,7 @@ class MessageService {
} else {
this.timerMessage.timerBlackout = status;
}
eventStore.set('timerMessage', this.timerMessage);
this.throttledSet('timerMessage', this.timerMessage);
return this.getAll();
}