qortal-ui/electron.js

155 lines
3.9 KiB
JavaScript
Raw Normal View History

2022-02-15 19:23:10 +01:00
const { app, BrowserWindow, ipcMain, Menu, Notification, Tray, nativeImage, dialog } = require('electron');
2021-12-25 14:39:47 +01:00
const { autoUpdater } = require('electron-updater');
const server = require('./server.js');
const log = require('electron-log');
const path = require('path');
// THOUGHTS: Make this APP more modularize and platform agnostic...
process.env['APP_PATH'] = app.getAppPath();
autoUpdater.logger = log;
log.info('App starting...');
const editMenu = Menu.buildFromTemplate([
{
label: "Qortal",
submenu: [{
label: "Quit",
click() {
app.quit();
}
}]
},
{
label: "Edit",
submenu: [
{label: "Undo", accelerator: "CommandOrControl+Z", selector: "undo:"},
{label: "Redo", accelerator: "CommandOrControl+Shift+Z", selector: "redo:"},
{type: "separator"},
{label: "Cut", accelerator: "CommandOrControl+X", selector: "cut:"},
{label: "Copy", accelerator: "CommandOrControl+C", selector: "copy:"},
{label: "Paste", accelerator: "CommandOrControl+V", selector: "paste:"},
{label: "Select All", accelerator: "CommandOrControl+A", selector: "selectAll:"}
]
}
]);
Menu.setApplicationMenu(editMenu);
let myWindow = null;
// TODO: Move the Tray function into another file (maybe Tray.js) -_-
// const tray = new Tray(nativeImage.createEmpty());
const APP_ICON = path.join(__dirname, 'img', 'icons');
const iconPath = () => {
return APP_ICON + (process.platform === 'win32' ? '/ico/256x256.ico' : '/png/256x256.png');
};
function createWindow() {
myWindow = new BrowserWindow({
backgroundColor: '#eee',
width: 1280,
height: 720,
minWidth: 700,
minHeight: 640,
icon: iconPath(),
title: "Qortal",
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false,
partition: 'persist:webviewsession',
enableRemoteModule: false,
sandbox: true
},
show: false
})
myWindow.maximize();
myWindow.show();
myWindow.loadURL('http://localhost:12388/app/wallet')
myWindow.on('closed', function () {
myWindow = null
})
}
const createTray = () => {
let myTray = new Tray(path.join(__dirname, 'img', 'icons', 'png', '32x32.png'))
const contextMenu = Menu.buildFromTemplate([{
label: "Quit", click() {
myTray.destroy();
app.quit();
},
}])
myTray.setTitle("QORTAL UI")
myTray.setToolTip("QORTAL UI")
myTray.setContextMenu(contextMenu)
}
const isLock = app.requestSingleInstanceLock();
if (!isLock) {
app.quit()
2021-12-25 14:39:47 +01:00
} else {
app.on('second-instance', (event, cmd, dir) => {
if (myWindow) {
if (myWindow.isMinimized()) myWindow.restore()
myWindow.focus()
}
})
app.allowRendererProcessReuse = true
app.on('ready', () => {
createWindow();
createTray();
if (process.platform === 'win32') {
2021-12-30 17:40:56 +01:00
app.setAppUserModelId("org.qortal.QortalUI");
2021-12-25 14:39:47 +01:00
}
autoUpdater.checkForUpdatesAndNotify();
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit();
}
})
app.on('activate', function () {
if (myWindow === null) {
createWindow();
createTray();
}
})
ipcMain.on('app_version', (event) => {
log.info(app.getVersion());
2021-12-25 15:31:39 +01:00
mainWindow.webContents.send('app_version', { version: app.getVersion() });
});
2021-12-25 14:39:47 +01:00
autoUpdater.on('update-available', () => {
const n = new Notification({
title: 'Update Available!',
2022-02-15 19:23:10 +01:00
body: 'It will be downloaded ⌛️ in the background!'
2021-12-25 14:39:47 +01:00
})
n.show();
})
2022-02-15 19:23:10 +01:00
autoUpdater.on('update-downloaded', (event) => {
const dialogOpts = {
type: 'info',
buttons: ['Restart now', 'Install after next restart'],
title: 'Update available',
detail: 'A new Qortal UI version has been downloaded. Click RESTART NOW to apply update, or INSTALL AFTER NEXT RESTART to install after next start.'
}
dialog.showMessageBox(dialogOpts).then((returnValue) => {
if (returnValue.response === 0) {
autoUpdater.quitAndInstall()
} else {
return
}
})
})
2021-12-25 14:39:47 +01:00
autoUpdater.on('error', (err) => {
const n = new Notification({
title: 'Error while Updating...',
body: err
})
2022-02-15 19:23:10 +01:00
n.show();
2021-12-25 14:39:47 +01:00
})
}