294 lines
6.1 KiB
JavaScript
294 lines
6.1 KiB
JavaScript
const {app, Menu, BrowserWindow, ipcMain, dialog } = require('electron')
|
|
|
|
const path = require('path')
|
|
const fs = require('fs')
|
|
// To check for update on Github repo
|
|
const {autoUpdater} = require("electron-updater")
|
|
|
|
// Enable non contribution mode (test)
|
|
process.env.SA_MODE = 'gitDisable'
|
|
process.env.PACKAGED_PATH = app.getAppPath()
|
|
process.env.DATA_PATH = app.getPath('documents')
|
|
|
|
const WINDOW_WIDTH = 1280
|
|
const WINDOW_HEIGHT = 768
|
|
|
|
let mainWindow, consoleWindow, platform
|
|
|
|
const port = 34248 // Default HTTP port
|
|
|
|
run()
|
|
|
|
function run() {
|
|
const { fork } = require('child_process')
|
|
platform = fork(path.join(__dirname, '/PlatformRoot.js'), ["noBrowser"], {stdio: ['pipe', 'pipe', 'pipe', 'ipc'], env: process.env})
|
|
|
|
platform.on('message', _ => {
|
|
openMain()
|
|
openConsoleWindow()
|
|
})
|
|
}
|
|
|
|
ipcMain.on("toMain", (event, args) => {
|
|
if (args === "ImAlive!" && consoleWindow) {
|
|
platform.stdout.setEncoding('utf8')
|
|
platform.stdout.on('data', (data) => {
|
|
if(consoleWindow != null) {
|
|
consoleWindow.webContents.send("fromMain", data);
|
|
}
|
|
})
|
|
}
|
|
})
|
|
|
|
|
|
function openMain () {
|
|
let bw_options = {
|
|
width: WINDOW_WIDTH,
|
|
height: WINDOW_HEIGHT,
|
|
resizable: true,
|
|
webPreferences: {
|
|
nodeIntegration: false, // is default value after Electron v5
|
|
contextIsolation: true, // protect against prototype pollution
|
|
enableRemoteModule: false, // turn off remote
|
|
}
|
|
}
|
|
|
|
mainWindow = new BrowserWindow(
|
|
bw_options
|
|
)
|
|
|
|
createMainMenus()
|
|
|
|
mainWindow.loadURL("http://localhost:" + port)
|
|
|
|
mainWindow.on('close', function (e) {
|
|
if (consoleWindow.isVisible()) {
|
|
e.preventDefault()
|
|
mainWindow.hide()
|
|
} else {
|
|
let choice = dialog.showMessageBoxSync(
|
|
mainWindow,
|
|
{
|
|
type: 'question',
|
|
buttons: ['Yes', 'No'],
|
|
title: 'Confirm',
|
|
message: 'Do you really want to close Superalgos?'
|
|
}
|
|
)
|
|
// 0 for Yes
|
|
if (choice === 0) {
|
|
mainWindow = null
|
|
app.exit()
|
|
}
|
|
// 1 for No
|
|
if (choice === 1) {
|
|
e.preventDefault()
|
|
}
|
|
}
|
|
})
|
|
|
|
mainWindow.on('activate', function () {
|
|
mainWindow.show()
|
|
})
|
|
}
|
|
|
|
function openConsoleWindow() {
|
|
if(consoleWindow) {
|
|
consoleWindow.focus()
|
|
return
|
|
}
|
|
|
|
consoleWindow = new BrowserWindow({
|
|
resizable: true,
|
|
title: 'Platform Logs',
|
|
minimizable: false,
|
|
fullscreenable: true,
|
|
show: false,
|
|
width: WINDOW_WIDTH,
|
|
webPreferences: {
|
|
nodeIntegration: false, // is default value after Electron v5
|
|
contextIsolation: true, // protect against prototype pollution
|
|
enableRemoteModule: false, // turn off remote
|
|
preload: path.join(__dirname, "preload.js") // use a preload script
|
|
}
|
|
})
|
|
|
|
consoleWindow.setBackgroundColor('#000000')
|
|
consoleWindow.loadFile('./console.html')
|
|
|
|
|
|
consoleWindow.on('close', function (e) {
|
|
if (mainWindow.isVisible()) {
|
|
e.preventDefault()
|
|
createMainMenus()
|
|
consoleWindow.hide()
|
|
} else {
|
|
let choice = dialog.showMessageBoxSync(
|
|
mainWindow,
|
|
{
|
|
type: 'question',
|
|
buttons: ['Yes', 'No'],
|
|
title: 'Confirm',
|
|
message: 'Do you really want to close Superalgos?'
|
|
}
|
|
)
|
|
// 0 for Yes
|
|
if (choice === 0) {
|
|
consoleWindow = null
|
|
app.exit()
|
|
}
|
|
// 1 for No
|
|
if (choice === 1) {
|
|
e.preventDefault()
|
|
}
|
|
}
|
|
})
|
|
|
|
consoleWindow.on('show', function () {
|
|
createConsoleMenus()
|
|
})
|
|
}
|
|
|
|
app.on('ready', function () {
|
|
autoUpdater.checkForUpdatesAndNotify();
|
|
createMainMenus()
|
|
})
|
|
|
|
app.on('window-all-closed', function () {
|
|
if (process.platform !== 'darwin') app.quit()
|
|
})
|
|
|
|
app.on('activate', function () {
|
|
if (BrowserWindow.getAllWindows().length === 0) createWindow()
|
|
})
|
|
|
|
function createMainMenus() {
|
|
function logsActive() {
|
|
if(consoleWindow) {
|
|
return true
|
|
} else {
|
|
return false
|
|
}
|
|
}
|
|
|
|
const mainTemplate = [
|
|
{
|
|
label: 'File',
|
|
submenu: [
|
|
{
|
|
role: 'quit'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'Edit',
|
|
submenu: [
|
|
{role: 'undo'},
|
|
{role: 'redo'},
|
|
{type: 'separator'},
|
|
{role: 'cut'},
|
|
{role: 'copy'},
|
|
{role: 'paste'},
|
|
{role: 'delete'},
|
|
{role: 'selectall'}
|
|
]
|
|
},
|
|
{
|
|
label: 'View',
|
|
submenu: [
|
|
{
|
|
label: 'Open in Browser...',
|
|
click () {
|
|
require('electron').shell.openExternal('http://localhost:' + port)
|
|
}
|
|
},
|
|
{
|
|
type: 'separator'
|
|
},
|
|
{role: 'reload'},
|
|
{role: 'forcereload'},
|
|
{role: 'toggledevtools'},
|
|
{type: 'separator'},
|
|
{role: 'resetzoom'},
|
|
{role: 'zoomin'},
|
|
{role: 'zoomout'},
|
|
{type: 'separator'},
|
|
{role: 'togglefullscreen'}
|
|
]
|
|
},
|
|
{
|
|
label: 'Logs',
|
|
enabled: logsActive(),
|
|
click () {
|
|
if(consoleWindow) {
|
|
consoleWindow.show()
|
|
} else {
|
|
openConsoleWindow()
|
|
}
|
|
}
|
|
}
|
|
]
|
|
|
|
const mainMenu = Menu.buildFromTemplate(mainTemplate)
|
|
Menu.setApplicationMenu(mainMenu)
|
|
}
|
|
|
|
function createConsoleMenus () {
|
|
|
|
function uiActive() {
|
|
if(mainWindow.isVisible()) {
|
|
return false
|
|
} else {
|
|
return true
|
|
}
|
|
}
|
|
|
|
const consoleTemplate = [
|
|
{
|
|
label: 'File',
|
|
submenu: [
|
|
{
|
|
role: 'quit'
|
|
}
|
|
]
|
|
},
|
|
{
|
|
label: 'Edit',
|
|
submenu: [
|
|
{role: 'undo'},
|
|
{role: 'redo'},
|
|
{type: 'separator'},
|
|
{role: 'cut'},
|
|
{role: 'copy'},
|
|
{role: 'paste'},
|
|
{role: 'delete'},
|
|
{role: 'selectall'}
|
|
]
|
|
},
|
|
{
|
|
label: 'View',
|
|
submenu: [
|
|
{role: 'reload'},
|
|
{role: 'forcereload'},
|
|
{role: 'toggledevtools'},
|
|
{type: 'separator'},
|
|
{role: 'resetzoom'},
|
|
{role: 'zoomin'},
|
|
{role: 'zoomout'},
|
|
{type: 'separator'},
|
|
{role: 'togglefullscreen'}
|
|
]
|
|
},
|
|
{
|
|
label: 'Show UI',
|
|
id: 'ui',
|
|
enabled: uiActive(),
|
|
click () {
|
|
mainWindow.show()
|
|
}
|
|
}
|
|
]
|
|
|
|
const consoleMenu = Menu.buildFromTemplate(consoleTemplate)
|
|
Menu.setApplicationMenu(consoleMenu)
|
|
} |