pretty loose files

This commit is contained in:
2022-12-12 14:55:06 -06:00
parent 29bdf40ffb
commit b754eece0d
7 changed files with 228 additions and 218 deletions
+1 -1
View File
@@ -20,6 +20,6 @@ module.exports = {
'no-use-before-define': 'off',
'space-infix-ops': 'warn',
'no-bitwise': 'off',
'no-restricted-globals': 'off'
'no-restricted-globals': 'off',
},
};
-1
View File
@@ -42,4 +42,3 @@ jobs:
node-version: 18
- run: npm ci
- run: npm run release
+1
View File
@@ -1,4 +1,5 @@
![Latest Release Build Status](https://img.shields.io/github/workflow/status/stagehacks/Cue-View/release?label=release%20build&logo=github)
# Cue View
A dashboard for everything in your show.
+1 -3
View File
@@ -88,14 +88,12 @@
<th>Pin:</th>
<td><input id="device-settings-pin" type="checkbox" /></td>
</tr>
<tbody id="device-settings-fields">
</tbody>
<tbody id="device-settings-fields"></tbody>
</table>
<h3>No Device Selected</h3>
</div>
</div>
</div>
<div id="all-devices"></div>
+127 -124
View File
@@ -1,4 +1,11 @@
const { app, BrowserWindow, Menu, ipcMain, nativeTheme, dialog } = require('electron');
const {
app,
BrowserWindow,
Menu,
ipcMain,
nativeTheme,
dialog,
} = require('electron');
const { autoUpdater } = require('electron-updater');
const path = require('path');
@@ -10,7 +17,6 @@ let manualUpdateCheck = false;
let menuObj;
let mainWindow;
const menuTemplate = [
...(isMac ? [{ role: 'appMenu' }] : []),
{
@@ -19,17 +25,17 @@ const menuTemplate = [
{
label: 'Clear Saved Data',
id: 'resetViews',
click (menuItem, window, event) {
click(menuItem, window, event) {
mainWindow.webContents.send('resetViews');
}
},
},
{
label: 'Reload App',
role: 'reload'
role: 'reload',
},
{ type: 'separator' },
...(isMac ? [{ role: 'close' }] : [{ role: 'quit' }])
]
...(isMac ? [{ role: 'close' }] : [{ role: 'quit' }]),
],
},
{ role: 'editMenu' },
{
@@ -42,31 +48,31 @@ const menuTemplate = [
accelerator: 'CommandOrControl+1',
id: 'window1',
enabled: true,
click (menuItem, window, event) {
mainWindow.webContents.send('loadSlot',1);
}
click(menuItem, window, event) {
mainWindow.webContents.send('loadSlot', 1);
},
},
{
label: 'Arrangement 2',
accelerator: 'CommandOrControl+2',
id: 'window2',
enabled: true,
click (menuItem, window, event) {
mainWindow.webContents.send('loadSlot',2);
}
click(menuItem, window, event) {
mainWindow.webContents.send('loadSlot', 2);
},
},
{
label: 'Arrangement 3',
accelerator: 'CommandOrControl+3',
id: 'window3',
enabled: true,
click (menuItem, window, event) {
mainWindow.webContents.send('loadSlot',3);
}
click(menuItem, window, event) {
mainWindow.webContents.send('loadSlot', 3);
},
},
{ type: 'separator' },
{ role: 'toggleDevTools' }
]
{ role: 'toggleDevTools' },
],
},
{
label: 'Device',
@@ -76,9 +82,9 @@ const menuTemplate = [
accelerator: 'CommandOrControl+F',
id: 'deviceSearch',
enabled: true,
click (menuItem, window, event) {
click(menuItem, window, event) {
mainWindow.webContents.send('searchAll');
}
},
},
{ type: 'separator' },
{
@@ -88,23 +94,23 @@ const menuTemplate = [
accelerator: 'CommandOrControl+P',
id: 'devicePin',
enabled: false,
click (menuItem, window, event) {
click(menuItem, window, event) {
mainWindow.webContents.send(
'setActiveDevicePinned',
menuItem.checked
);
}
},
},
{
label: 'Delete',
accelerator: 'CommandOrControl+Backspace',
id: 'deviceDelete',
enabled: false,
click (menuItem, window, event) {
click(menuItem, window, event) {
mainWindow.webContents.send('deleteActive');
}
}
]
},
},
],
},
{
label: 'Help',
@@ -112,67 +118,64 @@ const menuTemplate = [
submenu: [
{
label: 'About',
role: 'about'
role: 'about',
},
{
label: 'Check for Updates',
click: ()=>{
click: () => {
// set manual update flag
manualUpdateCheck = true
manualUpdateCheck = true;
autoUpdater.checkForUpdates();
}
},
},
{
label: 'Enable Auto Update',
click: ()=>{
mainWindow.webContents.send('setAutoUpdate',!autoUpdate);
}
}
]
click: () => {
mainWindow.webContents.send('setAutoUpdate', !autoUpdate);
},
},
],
},
];
const windowMac = {
width: 1500,
height: 900,
titleBarStyle: 'hiddenInset',
transparent: true,
frame: false,
show: false,
// backgroundColor: "#333333",
vibrancy: 'window',
visualEffectState: 'followWindow',
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
preload: path.join(__dirname, 'preload.js'),
},
}
const windowWin = {
width: 1500,
height: 900,
backgroundColor: "#333333",
titleBarStyle: 'hiddenInset',
transparent: true,
frame: false,
show: false,
// backgroundColor: "#333333",
vibrancy: 'window',
visualEffectState: 'followWindow',
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
preload: path.join(__dirname, 'preload.js'),
},
}
};
if (isWin)
{
app.setAppUserModelId(app.name);
const windowWin = {
width: 1500,
height: 900,
backgroundColor: '#333333',
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
preload: path.join(__dirname, 'preload.js'),
},
};
if (isWin) {
app.setAppUserModelId(app.name);
}
const createWindow = () => {
nativeTheme.themeSource = 'dark';
if(isMac){
if (isMac) {
mainWindow = new BrowserWindow(windowMac);
}else{
} else {
mainWindow = new BrowserWindow(windowWin);
}
@@ -192,7 +195,7 @@ const createWindow = () => {
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
@@ -224,134 +227,134 @@ ipcMain.on('setDevicePin', (event, arg) => {
menuObj.getMenuItemById('devicePin').checked = arg;
});
// Autoupdate logic
ipcMain.on('checkForUpdates', (event, arg)=>{
ipcMain.on('checkForUpdates', (event, arg) => {
autoUpdater.checkForUpdates();
})
});
ipcMain.on('setAutoUpdate', (event, _autoUpdate) => {
autoUpdate = _autoUpdate;
ipcMain.on('setAutoUpdate', (event, _autoUpdate)=>{
autoUpdate = _autoUpdate
// update menu item for enabling/disabling auto update
menuTemplate[menuTemplate.length-1].submenu[2].label = autoUpdate ? 'Disable Auto Update' : 'Enable Auto Update';
menuTemplate[menuTemplate.length - 1].submenu[2].label = autoUpdate
? 'Disable Auto Update'
: 'Enable Auto Update';
menuObj = Menu.buildFromTemplate(menuTemplate);
Menu.setApplicationMenu(menuObj);
})
});
// this can be set to true to bypass the download update dialog and skip straight to install prompt
autoUpdater.autoDownload = false;
autoUpdater.on('update-available', (updateInfo) => {
// skip prompting to download if autoDownload is set
if(autoUpdater.autoDownload){
if (autoUpdater.autoDownload) {
return;
}
const msg = `Version v${updateInfo.version} is available. Would you like to download it?`
const msg = `Version v${updateInfo.version} is available. Would you like to download it?`;
const title = 'Update Available';
let dialogOpts = {}
let dialogOpts = {};
if(isMac){
if (isMac) {
dialogOpts = {
type: 'info',
buttons: ['Download', 'Cancel'],
title: 'Update Available',
message: title,
detail: msg
}
}else{
detail: msg,
};
} else {
dialogOpts = {
type: 'info',
buttons: ['Download', 'Cancel'],
title: 'Update Available',
message: msg
}
message: msg,
};
}
dialog.showMessageBox(mainWindow,dialogOpts).then((returnValue) => {
dialog.showMessageBox(mainWindow, dialogOpts).then((returnValue) => {
// download was clicked
if (returnValue.response === 0){
if (returnValue.response === 0) {
autoUpdater.downloadUpdate();
}
})
})
});
});
autoUpdater.on('update-downloaded',(event)=>{
autoUpdater.on('update-downloaded', (event) => {
const title = 'Update Downloaded';
const msg = `Version v${event.version} has been downloaded. Would you like to install this update now?`
const msg = `Version v${event.version} has been downloaded. Would you like to install this update now?`;
let dialogOpts = {}
if(isMac){
let dialogOpts = {};
if (isMac) {
dialogOpts = {
type: 'info',
buttons: ['Install', 'Later'],
title: 'Update Available',
message: title,
detail: msg
}
}else{
detail: msg,
};
} else {
dialogOpts = {
type: 'info',
buttons: ['Install', 'Later'],
title: 'Update Available',
message: msg
}
message: msg,
};
}
dialog.showMessageBox(mainWindow,dialogOpts).then((returnValue) => {
if (returnValue.response === 0) autoUpdater.quitAndInstall()
})
})
autoUpdater.on('update-not-available',(updateInfo)=>{
if(manualUpdateCheck){
let dialogOpts = {}
const msg = `There is no update available at this time. Latest version is v${updateInfo.version}`
if(isMac){
dialog.showMessageBox(mainWindow, dialogOpts).then((returnValue) => {
if (returnValue.response === 0) autoUpdater.quitAndInstall();
});
});
autoUpdater.on('update-not-available', (updateInfo) => {
if (manualUpdateCheck) {
let dialogOpts = {};
const msg = `There is no update available at this time. Latest version is v${updateInfo.version}`;
if (isMac) {
dialogOpts = {
type: 'info',
buttons: ['Ok'],
title: 'No Update Available',
message: 'No Update Available',
detail: msg
}
}else{
detail: msg,
};
} else {
dialogOpts = {
type: 'info',
buttons: ['Ok'],
title: 'No Update Available',
message: msg
}
message: msg,
};
}
dialog.showMessageBox(mainWindow,dialogOpts)
dialog.showMessageBox(mainWindow, dialogOpts);
// revert manual update flag
manualUpdateCheck = false;
}
})
});
autoUpdater.on('error',(error,message)=>{
let dialogOpts = {}
if(isMac){
autoUpdater.on('error', (error, message) => {
let dialogOpts = {};
if (isMac) {
dialogOpts = {
type: 'error',
buttons: ['Ok'],
title: 'Update Error',
message: 'Update Error',
detail: error.message
}
}else{
detail: error.message,
};
} else {
dialogOpts = {
type: 'error',
buttons: ['Ok'],
title: 'Update Error',
message: error.message
}
message: error.message,
};
}
dialog.showMessageBox(mainWindow,dialogOpts)
})
dialog.showMessageBox(mainWindow, dialogOpts);
});
+38 -35
View File
@@ -1,41 +1,44 @@
const notarize = require('@electron/notarize');
const fs = require('fs')
const path = require('path')
const fs = require('fs');
const path = require('path');
module.exports = async function (params) {
if (process.platform !== 'darwin') {
console.log('Only need to notarize MacOS, skipping')
return
}
const appId = 'com.stagehacks.cueview'
if (process.platform !== 'darwin') {
console.log('Only need to notarize MacOS, skipping');
return;
}
const appPath = path.join(
params.appOutDir,
`${params.packager.appInfo.productFilename}.app`
)
const appId = 'com.stagehacks.cueview';
if (!fs.existsSync(appPath)) {
console.error('App file not found skipping notarization.');
return;
}
if(process.env.APPLE_ID === undefined || process.env.APPLE_ID_PASSWORD === undefined){
console.log('Apple ID and Password must be set in order to notarize.')
return;
}
const appPath = path.join(
params.appOutDir,
`${params.packager.appInfo.productFilename}.app`
);
try {
console.log(`Notarizing ${appId} found at ${appPath}`)
await notarize.notarize({
appBundleId: appId,
appPath,
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_ID_PASSWORD,
})
console.log(`Done notarizing ${appId}`)
} catch (error) {
console.log('There was an error notarizing.')
console.error(error)
}
}
if (!fs.existsSync(appPath)) {
console.error('App file not found skipping notarization.');
return;
}
if (
process.env.APPLE_ID === undefined ||
process.env.APPLE_ID_PASSWORD === undefined
) {
console.log('Apple ID and Password must be set in order to notarize.');
return;
}
try {
console.log(`Notarizing ${appId} found at ${appPath}`);
await notarize.notarize({
appBundleId: appId,
appPath,
appleId: process.env.APPLE_ID,
appleIdPassword: process.env.APPLE_ID_PASSWORD,
});
console.log(`Done notarizing ${appId}`);
} catch (error) {
console.log('There was an error notarizing.');
console.error(error);
}
};
+60 -54
View File
@@ -16,13 +16,13 @@ window.init = function init() {
ipcRenderer.send('enableSearchAll');
// load autoUpdate setting from storage and send to main process
const autoUpdate = JSON.parse(localStorage.getItem('autoUpdate'))
if(autoUpdate !== undefined && autoUpdate !== null){
if(autoUpdate){
const autoUpdate = JSON.parse(localStorage.getItem('autoUpdate'));
if (autoUpdate !== undefined && autoUpdate !== null) {
if (autoUpdate) {
ipcRenderer.send('checkForUpdates');
}
// send message so main process knows the state of autoUpdate
ipcRenderer.send('setAutoUpdate', autoUpdate)
ipcRenderer.send('setAutoUpdate', autoUpdate);
}
PLUGINS.init(() => {
@@ -35,31 +35,39 @@ window.init = function init() {
SEARCH.searchAll();
};
document.getElementById('device-settings-table').onclick = function settingsClick(e) {
e.stopPropagation();
};
document.getElementById('device-settings-name').onchange = function nameChange(e) {
e.stopPropagation();
DEVICE.changeActiveName(e.target.value);
};
document.getElementById('device-settings-plugin-dropdown').onchange = function dropdownChange(e) {
e.stopPropagation();
DEVICE.changeActiveType(e.target.value);
};
document.getElementById('device-settings-table').onclick =
function settingsClick(e) {
e.stopPropagation();
};
document.getElementById('device-settings-ip').onchange = function ipChange(e) {
document.getElementById('device-settings-name').onchange =
function nameChange(e) {
e.stopPropagation();
DEVICE.changeActiveName(e.target.value);
};
document.getElementById('device-settings-plugin-dropdown').onchange =
function dropdownChange(e) {
e.stopPropagation();
DEVICE.changeActiveType(e.target.value);
};
document.getElementById('device-settings-ip').onchange = function ipChange(
e
) {
e.stopPropagation();
DEVICE.changeActiveIP(e.target.value);
};
document.getElementById('device-settings-port').onchange = function portChange(e) {
e.stopPropagation();
DEVICE.changeActivePort(e.target.value);
};
document.getElementById('device-settings-port').onchange =
function portChange(e) {
e.stopPropagation();
DEVICE.changeActivePort(e.target.value);
};
document.getElementById('device-settings-pin').onchange = function pinChange(e) {
document.getElementById('device-settings-pin').onchange = function pinChange(
e
) {
e.stopPropagation();
if (e.target.checked) {
VIEW.pinActiveDevice();
@@ -68,7 +76,6 @@ window.init = function init() {
}
};
document.getElementById('save-slot-1').onclick = function slot1click(e) {
e.stopPropagation();
SAVESLOTS.loadSlot(1);
@@ -84,10 +91,11 @@ window.init = function init() {
SAVESLOTS.loadSlot(3);
};
document.getElementById('refresh-device-button').onclick = function refreshClick(e) {
e.stopPropagation();
DEVICE.refreshActive();
};
document.getElementById('refresh-device-button').onclick =
function refreshClick(e) {
e.stopPropagation();
DEVICE.refreshActive();
};
document.getElementById('device-list').onclick = function listClick(e) {
e.stopPropagation();
@@ -97,26 +105,25 @@ window.init = function init() {
}
};
document.getElementById('add-device-button').onchange = function addDeviceClick(e) {
DEVICE.registerDevice({
type: e.target.value,
defaultName: 'New Device',
port: undefined,
addresses: [],
});
e.target.selectedIndex = 0;
document.getElementById('add-device-button').onchange =
function addDeviceClick(e) {
DEVICE.registerDevice({
type: e.target.value,
defaultName: 'New Device',
port: undefined,
addresses: [],
});
e.target.selectedIndex = 0;
SAVESLOTS.saveAll();
};
SAVESLOTS.saveAll();
};
document.onkeyup = function keyUp(e) {
if(e.key === 'ArrowUp'){
if (e.key === 'ArrowUp') {
VIEW.selectPreviousDevice();
}else if(e.key === 'ArrowDown'){
} else if (e.key === 'ArrowDown') {
VIEW.selectNextDevice();
}else if(e.key === 'Tab'){
} else if (e.key === 'Tab') {
if (
document.activeElement.tagName !== 'INPUT' &&
document.activeElement.tagName !== 'SELECT'
@@ -124,10 +131,11 @@ window.init = function init() {
document.getElementById('device-settings-name').select();
}
}
};
document.getElementById('device-list-col').onclick = function deviceListClick(e) {
document.getElementById('device-list-col').onclick = function deviceListClick(
e
) {
try {
document
.querySelector('#device-list .active-device')
@@ -170,22 +178,20 @@ ipcRenderer.on('resetViews', (event, message) => {
});
ipcRenderer.on('loadSlot', (event, slot) => {
if(slot){
if (slot) {
SAVESLOTS.loadSlot(slot);
}
});
// message from main process to set autoUpdate state
ipcRenderer.on('setAutoUpdate',(event,autoUpdate)=>{
localStorage.setItem('autoUpdate',autoUpdate);
if(autoUpdate){
ipcRenderer.on('setAutoUpdate', (event, autoUpdate) => {
localStorage.setItem('autoUpdate', autoUpdate);
if (autoUpdate) {
ipcRenderer.send('checkForUpdates');
}
// message to main process that we have updated the state
ipcRenderer.send('setAutoUpdate',autoUpdate);
})
ipcRenderer.send('setAutoUpdate', autoUpdate);
});
function switchClass(element, className) {
try {
@@ -195,4 +201,4 @@ function switchClass(element, className) {
}
element.classList.add(className);
}
window.switchClass = switchClass;
window.switchClass = switchClass;