f161e196be
Major improvements to distribution index loading. Implemented new transitional UI for startup. If **no** distribution index is loaded on startup, completion of startup will be prevented and the user will be shown a message displaying the issue. Launch errors are now shown as overlays. Many more minor fixes and enhancements.
129 lines
3.9 KiB
JavaScript
129 lines
3.9 KiB
JavaScript
const {app, BrowserWindow, ipcMain} = require('electron')
|
|
const autoUpdater = require('electron-updater').autoUpdater
|
|
const isDev = require('electron-is-dev')
|
|
const path = require('path')
|
|
const url = require('url')
|
|
const fs = require('fs')
|
|
const ejse = require('ejs-electron')
|
|
|
|
// Setup auto updater.
|
|
function initAutoUpdater(event) {
|
|
// Defaults to true if application version contains prerelease components (e.g. 0.12.1-alpha.1)
|
|
// autoUpdater.allowPrerelease = true
|
|
if(isDev){
|
|
autoUpdater.autoInstallOnAppQuit = false
|
|
autoUpdater.updateConfigPath = path.join(__dirname, 'dev-app-update.yml')
|
|
}
|
|
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')
|
|
})
|
|
}
|
|
|
|
// Open channel to listen for update actions.
|
|
ipcMain.on('autoUpdateAction', (event, arg) => {
|
|
switch(arg){
|
|
case 'initAutoUpdater':
|
|
console.log('Initializing auto updater.')
|
|
initAutoUpdater(event)
|
|
event.sender.send('autoUpdateNotification', 'ready')
|
|
break
|
|
case 'checkForUpdate':
|
|
autoUpdater.checkForUpdates()
|
|
.catch(err => {
|
|
event.sender.send('autoUpdateNotification', 'realerror', err)
|
|
})
|
|
break
|
|
case 'installUpdateNow':
|
|
autoUpdater.quitAndInstall()
|
|
break
|
|
default:
|
|
console.log('Unknown argument', arg)
|
|
break
|
|
}
|
|
})
|
|
// Redirect distribution index event from preloader to renderer.
|
|
ipcMain.on('distributionIndexDone', (event, data) => {
|
|
event.sender.send('distributionIndexDone', data)
|
|
})
|
|
|
|
// Disable hardware acceleration.
|
|
// https://electronjs.org/docs/tutorial/offscreen-rendering
|
|
app.disableHardwareAcceleration()
|
|
|
|
// 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() {
|
|
|
|
win = new BrowserWindow({
|
|
width: 980,
|
|
height: 552,
|
|
icon: getPlatformIcon('WesterosSealSquare'),
|
|
frame: false,
|
|
webPreferences: {
|
|
preload: path.join(__dirname, 'app', 'assets', 'js', 'preloader.js')
|
|
},
|
|
backgroundColor: '#171614'
|
|
})
|
|
|
|
ejse.data('bkid', Math.floor((Math.random() * fs.readdirSync(path.join(__dirname, 'app', 'assets', 'images', 'backgrounds')).length)))
|
|
|
|
win.loadURL(url.format({
|
|
pathname: path.join(__dirname, 'app', 'app.ejs'),
|
|
protocol: 'file:',
|
|
slashes: true
|
|
}))
|
|
|
|
/*win.once('ready-to-show', () => {
|
|
win.show()
|
|
})*/
|
|
|
|
win.setMenu(null)
|
|
|
|
win.setResizable(true)
|
|
|
|
win.on('closed', () => {
|
|
win = null
|
|
})
|
|
}
|
|
|
|
function getPlatformIcon(filename){
|
|
const opSys = process.platform
|
|
if (opSys === 'darwin') {
|
|
filename = filename + '.icns'
|
|
} else if (opSys === 'win32') {
|
|
filename = filename + '.ico'
|
|
} else {
|
|
filename = filename + '.png'
|
|
}
|
|
|
|
return path.join(__dirname, 'app', 'assets', 'images', filename)
|
|
}
|
|
|
|
app.on('ready', createWindow);
|
|
|
|
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()
|
|
}
|
|
}) |