2021-03-07 16:17:23 +00:00
|
|
|
require('@electron/remote/main').initialize()
|
|
|
|
|
2018-06-04 23:34:47 +00:00
|
|
|
// Requirements
|
2020-05-22 01:02:58 +00:00
|
|
|
const { app, BrowserWindow, ipcMain, Menu } = require('electron')
|
2018-10-25 16:51:51 +00:00
|
|
|
const autoUpdater = require('electron-updater').autoUpdater
|
2018-06-04 23:34:47 +00:00
|
|
|
const ejse = require('ejs-electron')
|
|
|
|
const fs = require('fs')
|
2018-09-23 06:19:16 +00:00
|
|
|
const isDev = require('./app/assets/js/isdev')
|
2018-06-04 23:34:47 +00:00
|
|
|
const path = require('path')
|
|
|
|
const semver = require('semver')
|
2021-06-24 00:27:04 +00:00
|
|
|
const { pathToFileURL } = require('url')
|
2017-05-17 06:26:46 +00:00
|
|
|
|
2018-04-28 22:45:19 +00:00
|
|
|
// Setup auto updater.
|
2018-06-05 00:06:34 +00:00
|
|
|
function initAutoUpdater(event, data) {
|
|
|
|
|
|
|
|
if(data){
|
2018-06-04 23:34:47 +00:00
|
|
|
autoUpdater.allowPrerelease = true
|
|
|
|
} else {
|
|
|
|
// Defaults to true if application version contains prerelease components (e.g. 0.12.1-alpha.1)
|
|
|
|
// autoUpdater.allowPrerelease = true
|
|
|
|
}
|
|
|
|
|
2018-04-28 20:26:38 +00:00
|
|
|
if(isDev){
|
|
|
|
autoUpdater.autoInstallOnAppQuit = false
|
|
|
|
autoUpdater.updateConfigPath = path.join(__dirname, 'dev-app-update.yml')
|
|
|
|
}
|
2018-11-19 02:51:48 +00:00
|
|
|
if(process.platform === 'darwin'){
|
|
|
|
autoUpdater.autoDownload = false
|
|
|
|
}
|
2018-04-28 20:26:38 +00:00
|
|
|
autoUpdater.on('update-available', (info) => {
|
|
|
|
event.sender.send('autoUpdateNotification', 'update-available', info)
|
|
|
|
})
|
|
|
|
autoUpdater.on('update-downloaded', (info) => {
|
|
|
|
event.sender.send('autoUpdateNotification', 'update-downloaded', info)
|
|
|
|
})
|
|
|
|
autoUpdater.on('update-not-available', (info) => {
|
|
|
|
event.sender.send('autoUpdateNotification', 'update-not-available', info)
|
|
|
|
})
|
|
|
|
autoUpdater.on('checking-for-update', () => {
|
|
|
|
event.sender.send('autoUpdateNotification', 'checking-for-update')
|
2018-11-01 21:37:05 +00:00
|
|
|
})
|
2018-11-09 06:03:28 +00:00
|
|
|
autoUpdater.on('error', (err) => {
|
2018-11-01 21:37:05 +00:00
|
|
|
event.sender.send('autoUpdateNotification', 'realerror', err)
|
|
|
|
})
|
2018-04-28 20:26:38 +00:00
|
|
|
}
|
|
|
|
|
2018-04-28 22:45:19 +00:00
|
|
|
// Open channel to listen for update actions.
|
2018-06-04 23:34:47 +00:00
|
|
|
ipcMain.on('autoUpdateAction', (event, arg, data) => {
|
2018-04-28 20:26:38 +00:00
|
|
|
switch(arg){
|
|
|
|
case 'initAutoUpdater':
|
|
|
|
console.log('Initializing auto updater.')
|
2018-06-05 00:06:34 +00:00
|
|
|
initAutoUpdater(event, data)
|
2018-04-28 20:26:38 +00:00
|
|
|
event.sender.send('autoUpdateNotification', 'ready')
|
|
|
|
break
|
|
|
|
case 'checkForUpdate':
|
|
|
|
autoUpdater.checkForUpdates()
|
|
|
|
.catch(err => {
|
2018-04-28 22:45:19 +00:00
|
|
|
event.sender.send('autoUpdateNotification', 'realerror', err)
|
2018-04-28 20:26:38 +00:00
|
|
|
})
|
|
|
|
break
|
2018-06-04 23:34:47 +00:00
|
|
|
case 'allowPrereleaseChange':
|
|
|
|
if(!data){
|
|
|
|
const preRelComp = semver.prerelease(app.getVersion())
|
|
|
|
if(preRelComp != null && preRelComp.length > 0){
|
|
|
|
autoUpdater.allowPrerelease = true
|
|
|
|
} else {
|
|
|
|
autoUpdater.allowPrerelease = data
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
autoUpdater.allowPrerelease = data
|
|
|
|
}
|
|
|
|
break
|
2018-04-28 20:26:38 +00:00
|
|
|
case 'installUpdateNow':
|
|
|
|
autoUpdater.quitAndInstall()
|
|
|
|
break
|
|
|
|
default:
|
|
|
|
console.log('Unknown argument', arg)
|
|
|
|
break
|
|
|
|
}
|
|
|
|
})
|
2018-05-07 05:34:57 +00:00
|
|
|
// Redirect distribution index event from preloader to renderer.
|
2018-07-22 15:40:15 +00:00
|
|
|
ipcMain.on('distributionIndexDone', (event, res) => {
|
|
|
|
event.sender.send('distributionIndexDone', res)
|
2018-05-07 05:34:57 +00:00
|
|
|
})
|
2018-04-28 20:26:38 +00:00
|
|
|
|
2018-04-06 16:33:20 +00:00
|
|
|
// Disable hardware acceleration.
|
|
|
|
// https://electronjs.org/docs/tutorial/offscreen-rendering
|
|
|
|
app.disableHardwareAcceleration()
|
|
|
|
|
2020-03-18 23:54:46 +00:00
|
|
|
// https://github.com/electron/electron/issues/18397
|
|
|
|
app.allowRendererProcessReuse = true
|
|
|
|
|
2017-05-17 06:26:46 +00:00
|
|
|
// Keep a global reference of the window object, if you don't, the window will
|
|
|
|
// be closed automatically when the JavaScript object is garbage collected.
|
|
|
|
let win
|
|
|
|
|
|
|
|
function createWindow() {
|
2018-04-06 16:33:20 +00:00
|
|
|
|
2017-12-02 07:59:25 +00:00
|
|
|
win = new BrowserWindow({
|
|
|
|
width: 980,
|
|
|
|
height: 552,
|
2019-03-06 05:37:31 +00:00
|
|
|
icon: getPlatformIcon('SealCircle'),
|
2017-12-02 07:59:25 +00:00
|
|
|
frame: false,
|
|
|
|
webPreferences: {
|
2018-12-21 11:51:08 +00:00
|
|
|
preload: path.join(__dirname, 'app', 'assets', 'js', 'preloader.js'),
|
|
|
|
nodeIntegration: true,
|
2020-08-10 21:41:57 +00:00
|
|
|
contextIsolation: false,
|
2021-06-24 00:27:04 +00:00
|
|
|
enableRemoteModule: true
|
2018-04-29 22:05:59 +00:00
|
|
|
},
|
2018-05-08 10:34:16 +00:00
|
|
|
backgroundColor: '#171614'
|
2017-12-02 07:59:25 +00:00
|
|
|
})
|
2017-05-17 06:26:46 +00:00
|
|
|
|
2017-11-22 10:48:40 +00:00
|
|
|
ejse.data('bkid', Math.floor((Math.random() * fs.readdirSync(path.join(__dirname, 'app', 'assets', 'images', 'backgrounds')).length)))
|
2017-11-19 20:08:52 +00:00
|
|
|
|
2021-06-24 00:27:04 +00:00
|
|
|
win.loadURL(pathToFileURL(path.join(__dirname, 'app', 'app.ejs')).toString())
|
2017-05-17 06:26:46 +00:00
|
|
|
|
2018-04-29 22:05:59 +00:00
|
|
|
/*win.once('ready-to-show', () => {
|
|
|
|
win.show()
|
|
|
|
})*/
|
|
|
|
|
2019-06-02 20:15:57 +00:00
|
|
|
win.removeMenu()
|
2017-05-17 06:26:46 +00:00
|
|
|
|
2020-01-01 20:37:07 +00:00
|
|
|
win.resizable = true
|
2017-08-27 05:13:48 +00:00
|
|
|
|
2017-05-17 06:26:46 +00:00
|
|
|
win.on('closed', () => {
|
|
|
|
win = null
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2018-11-26 03:06:33 +00:00
|
|
|
function createMenu() {
|
|
|
|
|
|
|
|
if(process.platform === 'darwin') {
|
|
|
|
|
|
|
|
// Extend default included application menu to continue support for quit keyboard shortcut
|
|
|
|
let applicationSubMenu = {
|
|
|
|
label: 'Application',
|
|
|
|
submenu: [{
|
|
|
|
label: 'About Application',
|
|
|
|
selector: 'orderFrontStandardAboutPanel:'
|
|
|
|
}, {
|
|
|
|
type: 'separator'
|
|
|
|
}, {
|
|
|
|
label: 'Quit',
|
|
|
|
accelerator: 'Command+Q',
|
|
|
|
click: () => {
|
|
|
|
app.quit()
|
|
|
|
}
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
|
|
|
|
// New edit menu adds support for text-editing keyboard shortcuts
|
|
|
|
let editSubMenu = {
|
|
|
|
label: 'Edit',
|
|
|
|
submenu: [{
|
|
|
|
label: 'Undo',
|
|
|
|
accelerator: 'CmdOrCtrl+Z',
|
|
|
|
selector: 'undo:'
|
|
|
|
}, {
|
|
|
|
label: 'Redo',
|
|
|
|
accelerator: 'Shift+CmdOrCtrl+Z',
|
|
|
|
selector: 'redo:'
|
|
|
|
}, {
|
|
|
|
type: 'separator'
|
|
|
|
}, {
|
|
|
|
label: 'Cut',
|
|
|
|
accelerator: 'CmdOrCtrl+X',
|
|
|
|
selector: 'cut:'
|
|
|
|
}, {
|
|
|
|
label: 'Copy',
|
|
|
|
accelerator: 'CmdOrCtrl+C',
|
|
|
|
selector: 'copy:'
|
|
|
|
}, {
|
|
|
|
label: 'Paste',
|
|
|
|
accelerator: 'CmdOrCtrl+V',
|
|
|
|
selector: 'paste:'
|
|
|
|
}, {
|
|
|
|
label: 'Select All',
|
|
|
|
accelerator: 'CmdOrCtrl+A',
|
|
|
|
selector: 'selectAll:'
|
|
|
|
}]
|
|
|
|
}
|
|
|
|
|
|
|
|
// Bundle submenus into a single template and build a menu object with it
|
|
|
|
let menuTemplate = [applicationSubMenu, editSubMenu]
|
|
|
|
let menuObject = Menu.buildFromTemplate(menuTemplate)
|
|
|
|
|
|
|
|
// Assign it to the application
|
|
|
|
Menu.setApplicationMenu(menuObject)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2017-05-17 06:26:46 +00:00
|
|
|
function getPlatformIcon(filename){
|
2020-05-24 02:21:51 +00:00
|
|
|
let ext
|
|
|
|
switch(process.platform) {
|
|
|
|
case 'win32':
|
|
|
|
ext = 'ico'
|
|
|
|
break
|
|
|
|
case 'darwin':
|
|
|
|
case 'linux':
|
|
|
|
default:
|
|
|
|
ext = 'png'
|
|
|
|
break
|
2017-05-17 06:26:46 +00:00
|
|
|
}
|
|
|
|
|
2020-05-24 02:21:51 +00:00
|
|
|
return path.join(__dirname, 'app', 'assets', 'images', `${filename}.${ext}`)
|
2017-05-17 06:26:46 +00:00
|
|
|
}
|
|
|
|
|
2018-07-22 17:31:15 +00:00
|
|
|
app.on('ready', createWindow)
|
2018-11-26 03:06:33 +00:00
|
|
|
app.on('ready', createMenu)
|
2017-05-17 06:26:46 +00:00
|
|
|
|
|
|
|
app.on('window-all-closed', () => {
|
|
|
|
// On macOS it is common for applications and their menu bar
|
|
|
|
// to stay active until the user quits explicitly with Cmd + Q
|
|
|
|
if (process.platform !== 'darwin') {
|
|
|
|
app.quit()
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.on('activate', () => {
|
|
|
|
// On macOS it's common to re-create a window in the app when the
|
|
|
|
// dock icon is clicked and there are no other windows open.
|
|
|
|
if (win === null) {
|
|
|
|
createWindow()
|
|
|
|
}
|
|
|
|
})
|