/* jshint esversion: 6, asi: true, strict: true*/ /* global require, setTimeout, process, console*/ 'use strict' //process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'; const electron = require('electron') const { Menu, BrowserWindow, app } = electron const { EventEmitter } = require('events') const { join } = require('path') require('@electron/remote/main').initialize() const ee = new EventEmitter() const settings = require('settings') const system = require('system') const { delay } = require('delay') //Objects const mcopy = {} let SYSTEM let log let mainWindow let arduino let menu let display let ffmpeg let ffprobe let cam let cam2 let proj let proj2 let light let filmout let dev let cmd let seq let capper let alert let server const cfg = require('./data/cfg.json') var createMenu = function () { const template = require('./data/menu.json') menu = Menu.buildFromTemplate(template) Menu.setApplicationMenu(menu) } var createWindow = function () { mainWindow = new BrowserWindow({ width: 800, height: 600, minWidth : 800, minHeight : 600, icon: join(__dirname, 'assets/icons/icon.png'), skipTaskbar: true, toolbar: false, webPreferences : { nodeIntegration : true, enableRemoteModule: true, contextIsolation : false } }) mainWindow.loadURL('file://' + __dirname + '/index.html') if (process.argv.indexOf('-d') !== -1 || process.argv.indexOf('--dev') !== -1) { mainWindow.webContents.openDevTools() } else { mainWindow.setMenu(null) mainWindow.setAutoHideMenuBar(true) } mainWindow.on('closed', () => { mainWindow = null }) require('@electron/remote/main').enable(mainWindow.webContents) } var errorState = function () { if (seq && seq.running) { //pause sequence if running seq.pause(); } mainWindow.webContents.send('error_state', { stop : true }); } var init = async function () { log = await require('log')({}) createWindow() createMenu() try { SYSTEM = await system(mainWindow.webContents) } catch (err) { console.error(err) } await settings.restore() display = require('display')(SYSTEM) ffmpeg = require('ffmpeg')(SYSTEM) ffprobe = require('ffprobe')(SYSTEM) arduino = require('arduino')(cfg, ee, errorState) dev = require('devices')(arduino, settings, mainWindow) server = require('server')(mainWindow.webContents) light = require('light')(arduino, cfg, mainWindow.webContents) filmout = require('filmout')(display, server, ffmpeg, ffprobe, mainWindow.webContents, light) cam = require('cam')(arduino, cfg, mainWindow.webContents, filmout) proj = require('proj')(arduino, cfg, mainWindow.webContents, filmout) alert = require('alert')(mainWindow.webContents) try { await dev.enumerate() } catch (err) { console.error(err) log.error('Error enumerating connected devices', err) } if (dev && dev.connected && dev.connected.camera_second) { cam2 = require('cam')(arduino, cfg, mainWindow.webContents, filmout, true) } if (dev && dev.connected && dev.connected.projector_second) { proj2 = require('proj')(arduino, cfg, mainWindow.webContents, filmout, true) } if (dev && dev.connected && dev.connected.capper) { capper = require('capper')(arduino, cfg, mainWindow.webContents, filmout, true) } cmd = require('cmd')(cfg, proj, cam, light, alert, cam2, proj2, capper) seq = require('sequencer')(cfg, cmd, mainWindow.webContents) } app.on('ready', init) app.on('window-all-closed', () => { app.quit() }); app.on('activate', () => { if (mainWindow === null) { createWindow() } }); mcopy.relaunch = function () { app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])}) app.exit(0) }