qortal-ui/electron.js

183 lines
4.4 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');
app.commandLine.appendSwitch('js-flags', '--max-old-space-size=512')
2021-12-25 14:39:47 +01:00
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(),
2022-10-03 11:18:39 +02:00
title: "Qortal UI",
2021-12-25 14:39:47 +01:00
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: false,
partition: 'persist:webviewsession',
enableRemoteModule: false,
2022-10-03 11:18:39 +02:00
nativeWindowOpen: false,
2021-12-25 14:39:47 +01:00
sandbox: true
},
show: false
})
2022-10-03 11:18:39 +02:00
myWindow.maximize()
myWindow.show()
2021-12-25 14:39:47 +01:00
myWindow.loadURL('http://localhost:12388/app/wallet')
myWindow.on('closed', function () {
myWindow = null
})
2022-10-03 11:18:39 +02:00
myWindow.on('minimize',function(event) {
event.preventDefault()
myWindow.hide()
})
2021-12-25 14:39:47 +01:00
}
2022-10-03 11:18:39 +02:00
2021-12-25 14:39:47 +01:00
const createTray = () => {
2022-10-03 11:18:39 +02:00
let myTray = new Tray(__dirname + '/img/icons/png/tray/tray.png')
const contextMenu = Menu.buildFromTemplate([
{
label: `Qortal UI v${app.getVersion()}`,
enabled: false,
},
{
type: 'separator',
},
{
label: 'Show Qortal UI',
click: function () {
myWindow.maximize()
myWindow.show()
},
},
{
label: 'Quit',
click() {
myTray.destroy()
app.quit()
},
2021-12-25 14:39:47 +01:00
},
2022-10-03 11:18:39 +02:00
])
2021-12-25 14:39:47 +01:00
myTray.setTitle("QORTAL UI")
2022-10-03 11:18:39 +02:00
myTray.setToolTip(`Qortal UI v${app.getVersion()}`)
2021-12-25 14:39:47 +01:00
myTray.setContextMenu(contextMenu)
2022-10-03 11:18:39 +02:00
myTray.on("double-click", () => myWindow.maximize() , myWindow.show())
2021-12-25 14:39:47 +01:00
}
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
}
2022-03-16 11:20:13 +01:00
autoUpdater.checkForUpdatesAndNotify();
setInterval(() => {
autoUpdater.checkForUpdatesAndNotify();
}, 1000 * 60 * 15)
2021-12-25 14:39:47 +01:00
})
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',
2022-03-15 20:25:23 +01:00
buttons: ['Restart now', 'Install after close Qortal UI'],
2022-02-15 19:23:10 +01:00
title: 'Update available',
2022-03-15 20:25:23 +01:00
detail: 'A new Qortal UI version has been downloaded. Click RESTART NOW to apply update, or INSTALL AFTER CLOSE QORTAL UI to install after you quit the UI.'
2022-02-15 19:23:10 +01:00
}
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
})
}