mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-14 03:43:50 +00:00
V1 (#118)
* chore: upgrade minor versions * chore: upgrade cypress * chore: upgrade fe dependencies * update readme * update osx images * update readme * upgrade dependencies * upgrade test dependency * feat: add option to input autofill * feat: autofill to the left * chore: update docs * chore: cleanup ci * version bump * style: prevent zero height bar * fix: prevent loosing menu * ux: improve input, no spellcheck or autocomplete * small ux improvements in cuesheets * feat 111/increase maximum number of events * fix: optimistic delete issue with filter * refact: pincode workflow * chore: add versioning to packages
This commit is contained in:
@@ -2,10 +2,17 @@ import { Server } from 'node-osc';
|
||||
|
||||
let oscServer = null;
|
||||
|
||||
/**
|
||||
* @description utilty function to shutdown osc server
|
||||
*/
|
||||
export const shutdownOSCServer = () => {
|
||||
if (oscServer != null) oscServer.close();
|
||||
};
|
||||
|
||||
/**
|
||||
* @description initialises OSC server
|
||||
* @param config
|
||||
*/
|
||||
export const initiateOSC = (config) => {
|
||||
oscServer = new Server(config.port, '0.0.0.0');
|
||||
|
||||
@@ -66,7 +73,7 @@ export const initiateOSC = (config) => {
|
||||
break;
|
||||
case 'delay':
|
||||
try {
|
||||
const t = parseInt(args);
|
||||
const t = parseInt(args, 10);
|
||||
if (isNaN(t)) {
|
||||
global.timer.error('RX', `OSC IN: delay time not recognised ${args}`);
|
||||
return;
|
||||
@@ -78,7 +85,7 @@ export const initiateOSC = (config) => {
|
||||
break;
|
||||
case 'goto':
|
||||
try {
|
||||
const eventIndex = parseInt(args);
|
||||
const eventIndex = parseInt(args, 10);
|
||||
if (isNaN(eventIndex) || eventIndex <= 0) {
|
||||
global.timer.error(
|
||||
'RX',
|
||||
|
||||
@@ -8,9 +8,15 @@ import {
|
||||
event as eventDef,
|
||||
} from '../models/eventsDefinition.js';
|
||||
import { generateId } from '../utils/generate_id.js';
|
||||
import { MAX_EVENTS } from '../settings.js';
|
||||
|
||||
const MAX_EVENTS = 99;
|
||||
|
||||
/**
|
||||
* Insets an event after a given index
|
||||
* @param entry
|
||||
* @param index
|
||||
* @return {Promise<void>}
|
||||
* @private
|
||||
*/
|
||||
async function _insertAt(entry, index) {
|
||||
// get events
|
||||
const events = data.events;
|
||||
@@ -40,11 +46,25 @@ async function _insertAt(entry, index) {
|
||||
await db.write();
|
||||
}
|
||||
|
||||
async function _insertAfterId(entry, id) {
|
||||
const index = [...data.events].findIndex((event) => event.id === id);
|
||||
await _insertAt(entry, index + 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description deletes an event from the db given its id
|
||||
* @param eventId
|
||||
* @return {Promise<void>}
|
||||
*/
|
||||
async function _removeById(eventId) {
|
||||
data.events = Array.from(data.events).filter((e) => e.id !== eventId);
|
||||
await db.write();
|
||||
}
|
||||
|
||||
/**
|
||||
* @description returns all events of type event
|
||||
* @return {unknown[]}
|
||||
*/
|
||||
function getEventEvents() {
|
||||
// return data.events.filter((e) => e.type === 'event');
|
||||
return Array.from(data.events).filter((e) => e.type === 'event');
|
||||
@@ -97,6 +117,7 @@ export const eventsPost = async (req, res) => {
|
||||
if (data.events.length > MAX_EVENTS) {
|
||||
const error = `ERROR: Reached limit number of ${MAX_EVENTS} events`;
|
||||
res.status(400).send(error);
|
||||
return;
|
||||
}
|
||||
|
||||
// ensure structure
|
||||
@@ -121,10 +142,13 @@ export const eventsPost = async (req, res) => {
|
||||
|
||||
try {
|
||||
// get place where event should be
|
||||
const index = newEvent.order || 0;
|
||||
|
||||
// add new event in place
|
||||
await _insertAt(newEvent, index);
|
||||
if (newEvent.order) {
|
||||
await _insertAt(newEvent, newEvent.order);
|
||||
} else if (newEvent.after) {
|
||||
await _insertAfterId(newEvent, newEvent.after);
|
||||
} else {
|
||||
await _insertAt(newEvent, 0);
|
||||
}
|
||||
|
||||
// update timers
|
||||
_updateTimers();
|
||||
@@ -211,7 +235,6 @@ export const eventsReorder = async (req, res) => {
|
||||
data.events = events;
|
||||
await db.write();
|
||||
|
||||
// TODO: would it be more efficient to reorder at timer?
|
||||
// update timer
|
||||
_updateTimers();
|
||||
|
||||
|
||||
@@ -11,10 +11,6 @@ import { generateId } from '../utils/generate_id.js';
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
function getEventTitle() {
|
||||
return data.event.title;
|
||||
}
|
||||
|
||||
// Create controller for GET request to '/ontime/poll'
|
||||
// Returns data for current state
|
||||
export const poll = async (req, res) => {
|
||||
@@ -31,7 +27,7 @@ export const poll = async (req, res) => {
|
||||
// Create controller for GET request to '/ontime/db'
|
||||
// Returns -
|
||||
export const dbDownload = async (req, res) => {
|
||||
const fileTitle = getEventTitle() || 'ontime events';
|
||||
const fileTitle = data?.event?.title || 'ontime events';
|
||||
const dbFile = path.resolve(__dirname, '../', 'data/db.json');
|
||||
|
||||
res.download(dbFile, `${fileTitle}.json`, (err) => {
|
||||
|
||||
Reference in New Issue
Block a user