mcopy/app/main.js

137 lines
3.1 KiB
JavaScript
Raw Normal View History

/* jshint esversion: 6, asi: true, strict: true*/
/* global require, setTimeout, process, console*/
2017-12-20 03:54:39 +00:00
'use strict'
2017-02-09 14:35:07 +00:00
2017-12-20 03:54:39 +00:00
const electron = require('electron')
const { Menu, MenuItem, ipcMain, BrowserWindow, app } = electron
2017-12-20 03:54:39 +00:00
const fs = require('fs')
const os = require('os')
const { createLogger, format, transports } = require('winston')
const { combine, timestamp, label, printf, colorize, prettyPrint, simple } = format
2017-12-20 03:54:39 +00:00
const moment = require('moment')
const uuid = require('uuid')
const events = require('events')
2018-01-05 04:42:36 +00:00
const path = require('path')
2019-02-08 18:17:14 +00:00
2017-12-20 03:54:39 +00:00
const ee = new events.EventEmitter()
2019-02-08 18:17:14 +00:00
const settings = require('settings')
2019-02-08 19:28:57 +00:00
const system = require('system')
2019-02-08 18:17:14 +00:00
const Server = require('server')
const Intval = require('intval')
const delay = require('delay')
//Objects
2017-12-20 03:54:39 +00:00
const mcopy = {}
2016-04-11 06:01:26 +00:00
let SYSTEM;
let log;
let mainWindow;
let mscript;
let arduino;
let server;
let menu;
let display;
let ffmpeg;
let ffprobe;
let cam;
let cam2;
let proj;
let proj2;
let light;
let dig;
let dev;
let cmd;
let seq;
2019-02-08 18:17:14 +00:00
const cfg = require('./data/cfg.json')
2016-04-11 14:49:57 +00:00
var createMenu = function () {
2018-01-05 04:42:36 +00:00
const template = require('./data/menu.json')
menu = Menu.buildFromTemplate(template)
Menu.setApplicationMenu(menu)
}
2016-04-11 06:01:26 +00:00
2016-04-11 14:49:57 +00:00
var createWindow = function () {
mainWindow = new BrowserWindow({
width: 800,
height: 600,
minWidth : 800,
minHeight : 600,
icon: path.join(__dirname, 'assets/icons/icon.png')
})
mainWindow.loadURL('file://' + __dirname + '/index.html')
if (process.argv.indexOf('-d') !== -1 || process.argv.indexOf('--dev') !== -1) {
mainWindow.webContents.openDevTools()
}
mainWindow.on('closed', () => {
mainWindow = null
2018-01-05 04:42:36 +00:00
})
2016-04-11 06:01:26 +00:00
}
var init = async function () {
2018-01-05 04:42:36 +00:00
2019-03-21 19:47:25 +00:00
log = await require('log')({})
2019-02-08 18:17:14 +00:00
try {
SYSTEM = await system()
2019-02-08 18:17:14 +00:00
} catch (err) {
console.error(err)
2019-02-08 18:17:14 +00:00
}
createWindow()
createMenu()
2019-02-08 18:17:14 +00:00
await settings.restore()
display = require('display')(SYSTEM)
ffmpeg = require('ffmpeg')(SYSTEM)
ffprobe = require('ffprobe')(SYSTEM)
arduino = require('arduino')(cfg, ee)
mscript = require('mscript')
2019-04-16 14:01:42 +00:00
dev = require('devices')(arduino, settings, mainWindow)
2018-01-05 04:42:36 +00:00
//why is delay happening still?
await delay(2000)
try {
await dev.enumerate()
} catch (err) {
console.error(err)
log.error('Error enumerating connected devices', err)
}
light = require('light')(arduino, cfg, mainWindow.webContents)
dig = require('digital')(display, ffmpeg, ffprobe, mainWindow.webContents, light)
cam = require('cam')(arduino, cfg, mainWindow.webContents, dig)
proj = require('proj')(arduino, cfg, mainWindow.webContents, dig)
if (dev && dev.connected && dev.connected.camera_second) {
cam2 = require('cam')(arduino, cfg, mainWindow.webContents, dig, true)
}
if (dev && dev.connected && dev.connected.projector_second) {
proj2 = require('proj')(arduino, cfg, mainWindow.webContents, dig, true)
}
cmd = require('cmd')(cfg, proj, cam, light, cam2, proj2)
seq = require('sequencer')(cfg, cmd, mainWindow.webContents)
}
2016-06-21 15:05:44 +00:00
app.on('ready', init)
2016-06-21 15:05:44 +00:00
app.on('window-all-closed', () => {
2019-03-22 21:06:57 +00:00
app.quit();
2016-06-21 15:05:44 +00:00
});
app.on('activate', () => {
2016-06-21 15:05:44 +00:00
if (mainWindow === null) {
createWindow();
}
});
mcopy.relaunch = function () {
app.relaunch({args: process.argv.slice(1).concat(['--relaunch'])})
app.exit(0)
}