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 ,
2022-04-09 21:58:09 +02:00
nativeWindowOpen : false ,
2021-12-25 14:39:47 +01:00
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 ) {
2022-02-04 05:21:31 -08:00
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 ( ) ;
2022-03-01 10:24:06 +01:00
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 ) => {
2022-02-04 05:21:31 -08:00
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
} )
}