diff --git a/plugins/lightfactory/main.js b/plugins/lightfactory/main.js index 2bcb3a9..08ce3ce 100644 --- a/plugins/lightfactory/main.js +++ b/plugins/lightfactory/main.js @@ -22,17 +22,15 @@ function cleanMessage(message) { return message.split('\n').filter((line) => line.trim() !== ''); } -// TODO(jwetzell): process updates? are they live or do we need to poll? +// TODO(jwetzell): try to grab notes? exports.data = function data(_device, _message) { const message = _message.toString(); const device = _device; - console.log(message); if (message.includes('Current Cue List')) { // NOTE(jwetzell): loading cue list info const cueListMessage = cleanMessage(message); if (cueListMessage.includes('') && cueListMessage.includes('')) { - console.log('message is a cue list message'); const cueListstartIndex = cueListMessage.indexOf(''); const cueListFinishedIndex = cueListMessage.indexOf(''); @@ -58,7 +56,6 @@ exports.data = function data(_device, _message) { } } device.data.cueListToLoad = Object.keys(device.data.cueLists)[0]; - console.log(device.data.cueListToLoad); device.send(`get cues ${device.data.cueListToLoad}\n`); } } else if (message.includes('Current Live Cue')) { @@ -66,9 +63,7 @@ exports.data = function data(_device, _message) { const cueList = device.data.cueLists[device.data.cueListToLoad]; const cueListCuesMessage = cleanMessage(message); - console.log(cueListCuesMessage); if (cueListCuesMessage.includes('') && cueListCuesMessage.includes('')) { - console.log('message is a cue list message'); const cuesStartIndex = cueListCuesMessage.indexOf(''); const cuesFinishedIndex = cueListCuesMessage.indexOf(''); for (let i = cuesStartIndex + 1; i < cuesFinishedIndex; i++) { @@ -83,14 +78,38 @@ exports.data = function data(_device, _message) { cueList[cueName].active = false; } } - } - const cueListNames = Object.keys(device.data.cueLists); + const activeCueLine = cueListCuesMessage[cuesFinishedIndex + 1]; + if (activeCueLine) { + const activeCueLineParts = activeCueLine.split('Current Live Cue'); + const activeCue = activeCueLineParts[activeCueLineParts.length - 1].trim(); + if (activeCue && cueList.cues[activeCue] !== undefined) { + cueList.cues[activeCue].active = true; + } + } + } + // NOTE(jwetzell): load next cue list's cues if there is one + const cueListNames = Object.keys(device.data.cueLists); const cueListIndex = cueListNames.indexOf(device.data.cueListToLoad); device.data.cueListToLoad = cueListNames.at(cueListIndex + 1); if (device.data.cueListToLoad !== undefined) { device.send(`get cues ${device.data.cueListToLoad}\n`); } + } else if (message.includes('Running cue') || message.includes('Goto cue')) { + const cueUpdateMessage = message + .trim() + .slice(0, -1) + .split(':') + .map((item) => item.trim()); + if (cueUpdateMessage.length === 3) { + const cueListName = cueUpdateMessage[1]; + const updatedCueName = cueUpdateMessage[2]; + if (device.data.cueLists[cueListName] !== undefined) { + Object.entries(device.data.cueLists[cueListName].cues).forEach(([cueName, cueData]) => { + cueData.active = cueName === updatedCueName; + }); + } + } } device.draw(); };