2023-04-23 19:29:44 +02:00
|
|
|
const { app, BrowserWindow, ipcMain, ipcRenderer, Menu, Notification, Tray, nativeImage, dialog, webContents, nativeTheme } = require('electron')
|
2022-12-07 10:41:28 +01:00
|
|
|
const { autoUpdater } = require('electron-updater')
|
|
|
|
const server = require('./server.js')
|
|
|
|
const log = require('electron-log')
|
|
|
|
const path = require('path')
|
2023-04-23 19:29:44 +02:00
|
|
|
const i18n = require('./lib/i18n.js')
|
|
|
|
const fs = require('fs')
|
|
|
|
const electronDl = require('electron-dl')
|
2023-05-01 13:35:45 +02:00
|
|
|
const Store = require('electron-store')
|
2023-04-23 19:29:44 +02:00
|
|
|
const extract = require('extract-zip')
|
|
|
|
const fetch = require('node-fetch')
|
2023-04-25 14:58:52 +02:00
|
|
|
const execFile = require('child_process').execFile
|
2023-04-23 19:29:44 +02:00
|
|
|
const exec = require('child_process').exec
|
|
|
|
const spawn = require('child_process').spawn
|
2021-12-25 14:39:47 +01:00
|
|
|
|
2022-12-19 18:33:45 +01:00
|
|
|
app.disableHardwareAcceleration()
|
|
|
|
app.enableSandbox()
|
2023-04-23 19:29:44 +02:00
|
|
|
electronDl()
|
2021-12-25 14:39:47 +01:00
|
|
|
|
2022-12-07 10:41:28 +01:00
|
|
|
process.env['APP_PATH'] = app.getAppPath()
|
2021-12-25 14:39:47 +01:00
|
|
|
|
2023-04-23 19:29:44 +02:00
|
|
|
const homePath = app.getPath('home')
|
2023-04-25 14:58:52 +02:00
|
|
|
const downloadPath = app.getPath('downloads')
|
2023-05-01 13:35:45 +02:00
|
|
|
const store = new Store()
|
2023-04-23 19:29:44 +02:00
|
|
|
|
2022-12-07 10:41:28 +01:00
|
|
|
autoUpdater.autoDownload = false
|
|
|
|
autoUpdater.autoInstallOnAppQuit = false
|
|
|
|
autoUpdater.logger = log
|
|
|
|
autoUpdater.logger.transports.file.level = 'info'
|
2023-04-23 19:29:44 +02:00
|
|
|
|
2023-05-01 13:35:45 +02:00
|
|
|
if(!store.has('askingCore')) {
|
|
|
|
store.set('askingCore', false)
|
|
|
|
}
|
|
|
|
|
2022-12-07 10:41:28 +01:00
|
|
|
log.info('App starting...')
|
2023-04-23 19:29:44 +02:00
|
|
|
log.info('App Platform is', process.platform)
|
|
|
|
log.info('Platform arch is', process.arch)
|
2023-05-01 13:35:45 +02:00
|
|
|
log.info("ASKING CORE", store.get('askingCore'))
|
2023-04-23 19:29:44 +02:00
|
|
|
|
|
|
|
const winjar = String.raw`C:\Program Files\Qortal\qortal.jar`
|
|
|
|
const winurl = "https://github.com/Qortal/qortal/releases/latest/download/qortal.exe"
|
2023-04-25 14:58:52 +02:00
|
|
|
const winexe = downloadPath + "\\qortal.exe"
|
2023-04-23 19:29:44 +02:00
|
|
|
const startWinCore = "C:\\Program Files\\Qortal\\qortal.exe"
|
|
|
|
|
|
|
|
const zipdir = homePath
|
|
|
|
const zipfile = homePath + "/qortal.zip"
|
|
|
|
const zipurl = "https://github.com/Qortal/qortal/releases/latest/download/qortal.zip"
|
|
|
|
|
|
|
|
const qortaldir = homePath + "/qortal/"
|
|
|
|
const qortaljar = homePath + "/qortal/qortal.jar"
|
|
|
|
const qortalsettings = homePath + "/qortal/settings.json"
|
|
|
|
|
|
|
|
const javadir = homePath + "/jdk-17.0.2/"
|
|
|
|
|
|
|
|
const linjavax64url = "https://download.qortal.online/openjdk-17.0.2_linux-x64_bin.zip"
|
|
|
|
const linjavax64file = homePath + "/openjdk-17.0.2_linux-x64_bin.zip"
|
|
|
|
const linjavax64bindir = homePath + "/jdk-17.0.2/bin"
|
|
|
|
const linjavax64binfile = homePath + "/jdk-17.0.2/bin/java"
|
|
|
|
|
|
|
|
const linjavaarmurl = "https://download.qortal.online/openjdk-17.0.2_linux-arm_bin.zip"
|
|
|
|
const linjavaarmfile = homePath + "/openjdk-17.0.2_linux-arm_bin.zip"
|
|
|
|
const linjavaarmbindir = homePath + "/jdk-17.0.2/bin"
|
|
|
|
const linjavaarmbinfile = homePath + "/jdk-17.0.2/bin/java"
|
|
|
|
|
|
|
|
const linjavaarm64url = "https://download.qortal.online/openjdk-17.0.2_linux-arm64_bin.zip"
|
|
|
|
const linjavaarm64file = homePath + "/openjdk-17.0.2_linux-arm64_bin.zip"
|
|
|
|
const linjavaarm64bindir = homePath + "/jdk-17.0.2/bin"
|
|
|
|
const linjavaarm64binfile = homePath + "/jdk-17.0.2/bin/java"
|
|
|
|
|
|
|
|
const macjavax64url = "https://download.qortal.online/openjdk-17.0.2_macos-x64_bin.zip"
|
|
|
|
const macjavax64file = homePath + "/openjdk-17.0.2_macos-x64_bin.zip"
|
|
|
|
const macjavax64bindir = homePath + "/jdk-17.0.2/Contents/Home/bin"
|
|
|
|
const macjavax64binfile = homePath + "/jdk-17.0.2/Contents/Home/bin/java"
|
|
|
|
|
|
|
|
const macjavaaarch64url = "https://download.qortal.online/openjdk-17.0.2_macos-aarch64_bin.zip"
|
|
|
|
const macjavaaarch64file = homePath + "/openjdk-17.0.2_macos-aarch64_bin.zip"
|
|
|
|
const macjavaaarch64bindir = homePath + "/jdk-17.0.2/Contents/Home/bin"
|
|
|
|
const macjavaaarch64binfile = homePath + "/jdk-17.0.2/Contents/Home/bin/java"
|
|
|
|
|
|
|
|
const isRunning = (query, cb) => {
|
|
|
|
let platform = process.platform
|
|
|
|
let cmd = ''
|
|
|
|
switch (platform) {
|
|
|
|
case 'win32': cmd = `tasklist`; break
|
|
|
|
case 'darwin': cmd = `ps -ax | grep [q]ortal.jar`; break
|
|
|
|
case 'linux': cmd = `ps ax | grep [q]ortal.jar`; break
|
|
|
|
default: break
|
|
|
|
}
|
|
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
|
|
cb(stdout.toLowerCase().indexOf(query.toLowerCase()) > -1)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
2023-04-25 14:58:52 +02:00
|
|
|
async function checkWin() {
|
|
|
|
if (fs.existsSync(winjar)) {
|
|
|
|
isRunning('qortal.exe', (status) => {
|
|
|
|
if (status == true) {
|
|
|
|
log.info("Core is running, perfect !")
|
|
|
|
} else {
|
2023-05-01 13:35:45 +02:00
|
|
|
if (!store.get('askingCore')) {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
|
|
|
|
title: i18n.__("electron_translate_15"),
|
|
|
|
message: i18n.__("electron_translate_16"),
|
|
|
|
detail: i18n.__("electron_translate_17"),
|
|
|
|
checkboxLabel: i18n.__("electron_translate_28"),
|
|
|
|
checkboxChecked: false
|
2023-04-25 14:58:52 +02:00
|
|
|
}
|
2023-05-01 13:35:45 +02:00
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
spawn(startWinCore, { detached: true })
|
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
|
|
|
} else {
|
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2023-04-25 14:58:52 +02:00
|
|
|
}
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: [i18n.__("electron_translate_18"), i18n.__("electron_translate_19")],
|
|
|
|
title: i18n.__("electron_translate_20"),
|
|
|
|
message: i18n.__("electron_translate_21"),
|
|
|
|
detail: i18n.__("electron_translate_22")
|
|
|
|
}
|
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
downloadWindows()
|
|
|
|
} else {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-04-23 19:29:44 +02:00
|
|
|
async function downloadWindows() {
|
|
|
|
let winLoader = new BrowserWindow({
|
|
|
|
width: 500,
|
|
|
|
height: 500,
|
|
|
|
transparent: true,
|
|
|
|
frame: false,
|
|
|
|
alwaysOnTop: true,
|
|
|
|
show: false
|
|
|
|
})
|
|
|
|
winLoader.loadFile(path.join(__dirname + '/splash/download.html'))
|
|
|
|
|
|
|
|
winLoader.show()
|
|
|
|
await electronDl.download(myWindow, winurl, {
|
2023-04-25 14:58:52 +02:00
|
|
|
directory: downloadPath,
|
|
|
|
onProgress: function () { log.info("Starting Download Qortal Core Installer") }
|
2023-04-23 19:29:44 +02:00
|
|
|
})
|
|
|
|
winLoader.destroy()
|
2023-04-25 14:58:52 +02:00
|
|
|
|
|
|
|
const coreInstall = execFile(winexe, (e, stdout, stderr) => {
|
|
|
|
if (e) {
|
|
|
|
log.info(e)
|
|
|
|
removeQortalExe()
|
|
|
|
} else {
|
|
|
|
log.info('Qortal Core Installation Done', stdout, stderr)
|
|
|
|
removeQortalExe()
|
2023-04-23 19:29:44 +02:00
|
|
|
}
|
|
|
|
})
|
2023-04-25 14:58:52 +02:00
|
|
|
|
|
|
|
coreInstall.stdin.end()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function removeQortalExe() {
|
|
|
|
try {
|
|
|
|
await fs.rmSync(winexe, {
|
|
|
|
force: true,
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
log.info('renove error', err)
|
|
|
|
}
|
|
|
|
|
|
|
|
checkWin()
|
2023-04-23 19:29:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
async function checkPort() {
|
|
|
|
await fetch('http://localhost:12391/admin/info').catch(err => {
|
|
|
|
return {
|
|
|
|
ok: false,
|
|
|
|
status: -1,
|
|
|
|
statusText: 'Qortal Connect Failure',
|
|
|
|
}
|
|
|
|
}).then(checkResponseStatus)
|
|
|
|
}
|
|
|
|
|
|
|
|
async function checkResponseStatus(res) {
|
|
|
|
if (res.ok) {
|
|
|
|
return
|
2023-04-25 14:58:52 +02:00
|
|
|
} else if (process.platform === 'win32') {
|
|
|
|
await checkWin()
|
2023-04-23 19:29:44 +02:00
|
|
|
} else {
|
|
|
|
await javaversion()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function javaversion() {
|
|
|
|
var stderrChunks = []
|
|
|
|
let checkJava = await spawn('java', ['-version'],{shell: true})
|
|
|
|
if (process.platform === 'linux') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
if (fs.existsSync(linjavax64bindir)) {
|
|
|
|
checkJava = await spawn(linjavax64binfile, ['-version'],{cwd: homePath, shell: true, maxBuffer: Infinity})
|
|
|
|
}
|
|
|
|
} else if (process.arch === 'arm64') {
|
|
|
|
if (fs.existsSync(linjavaarm64bindir)) {
|
|
|
|
checkJava = await spawn(linjavaarm64binfile, ['-version'],{cwd: homePath, shell: true, maxBuffer: Infinity})
|
|
|
|
}
|
|
|
|
} else if (process.arch === 'arm') {
|
|
|
|
if (fs.existsSync(linjavaarmbindir)) {
|
|
|
|
checkJava = await spawn(linjavaarmbinfile, ['-version'],{cwd: homePath, shell: true, maxBuffer: Infinity})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (process.platform === 'darwin') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
if (fs.existsSync(macjavax64bindir)) {
|
|
|
|
checkJava = await spawn(macjavax64binfile, ['-version'],{cwd: homePath, shell: true, maxBuffer: Infinity})
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (fs.existsSync(macjavaaarch64bindir)) {
|
|
|
|
checkJava = await spawn(macjavaaarch64file, ['-version'],{cwd: homePath, shell: true, maxBuffer: Infinity})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
checkJava.stderr.on('data', (data) => {
|
|
|
|
stderrChunks = stderrChunks.concat(data)
|
|
|
|
})
|
|
|
|
|
|
|
|
checkJava.stderr.on('end', () => {
|
|
|
|
datres = Buffer.concat(stderrChunks).toString().split('\n')[0]
|
|
|
|
var javaVersion = new RegExp('(java|openjdk) version').test(datres) ? datres.split(' ')[2].replace(/"/g, '') : false
|
|
|
|
log.info("Java Version", javaVersion)
|
|
|
|
if (javaVersion != false) {
|
|
|
|
checkQortal()
|
|
|
|
} else {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: [i18n.__("electron_translate_23"), i18n.__("electron_translate_24")],
|
|
|
|
title: i18n.__("electron_translate_25"),
|
|
|
|
message: i18n.__("electron_translate_26"),
|
|
|
|
detail: i18n.__("electron_translate_27")
|
|
|
|
}
|
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
installJava()
|
|
|
|
} else {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
async function installJava() {
|
|
|
|
let splashLoader = new BrowserWindow({
|
|
|
|
width: 500,
|
|
|
|
height: 500,
|
|
|
|
transparent: true,
|
|
|
|
frame: false,
|
|
|
|
alwaysOnTop: true,
|
|
|
|
show: false
|
|
|
|
})
|
|
|
|
splashLoader.loadFile(path.join(__dirname + '/splash/download.html'))
|
|
|
|
|
|
|
|
if (process.platform === 'linux') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
try {
|
|
|
|
splashLoader.show()
|
|
|
|
await electronDl.download(myWindow, linjavax64url, {
|
|
|
|
directory: homePath,
|
|
|
|
onProgress: function () { log.info("Starting Download JAVA") }
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
splashLoader.destroy()
|
|
|
|
log.info('Download JAVA error', err)
|
|
|
|
}
|
|
|
|
splashLoader.destroy()
|
|
|
|
unzipJavaX64Linux()
|
|
|
|
} else if (process.arch === 'arm64') {
|
|
|
|
try {
|
|
|
|
splashLoader.show()
|
|
|
|
await electronDl.download(myWindow, linjavaarm64url, {
|
|
|
|
directory: homePath,
|
|
|
|
onProgress: function () { log.info("Starting Download JAVA") }
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
splashLoader.destroy()
|
|
|
|
log.info('Download JAVA error', err)
|
|
|
|
}
|
|
|
|
splashLoader.destroy()
|
|
|
|
unzipJavaArm64Linux()
|
|
|
|
} else if (process.arch === 'arm') {
|
|
|
|
try {
|
|
|
|
splashLoader.show()
|
|
|
|
await electronDl.download(myWindow, linjavaarmurl, {
|
|
|
|
directory: homePath,
|
|
|
|
onProgress: function () { log.info("Starting Download JAVA") }
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
splashLoader.destroy()
|
|
|
|
log.info('Download JAVA error', err)
|
|
|
|
}
|
|
|
|
splashLoader.destroy()
|
|
|
|
unzipJavaArmLinux()
|
|
|
|
}
|
|
|
|
} else if (process.platform === 'darwin') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
try {
|
|
|
|
splashLoader.show()
|
|
|
|
await electronDl.download(myWindow, macjavax64url, {
|
|
|
|
directory: homePath,
|
|
|
|
onProgress: function () { log.info("Starting Download JAVA") }
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
splashLoader.destroy()
|
|
|
|
log.info('Download JAVA error', err)
|
|
|
|
}
|
|
|
|
splashLoader.destroy()
|
|
|
|
unzipJavaX64Mac()
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
splashLoader.show()
|
|
|
|
await electronDl.download(myWindow, macjavaaarch64url, {
|
|
|
|
directory: homePath,
|
|
|
|
onProgress: function () { log.info("Starting Download JAVA") }
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
splashLoader.destroy()
|
|
|
|
log.info('Download JAVA error', err)
|
|
|
|
}
|
|
|
|
splashLoader.destroy()
|
|
|
|
unzipJavaAarch64Mac()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function unzipJavaX64Linux() {
|
|
|
|
try {
|
|
|
|
await extract(linjavax64file, { dir: homePath })
|
|
|
|
log.info('Unzip Java complete')
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Unzip Java error', err)
|
|
|
|
}
|
|
|
|
chmodJava()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function unzipJavaArm64Linux() {
|
|
|
|
try {
|
|
|
|
await extract(linjavaarm64file, { dir: homePath })
|
|
|
|
log.info('Unzip Java complete')
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Unzip Java error', err)
|
|
|
|
}
|
|
|
|
chmodJava()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function unzipJavaArmLinux() {
|
|
|
|
try {
|
|
|
|
await extract(linjavaarmfile, { dir: homePath })
|
|
|
|
log.info('Unzip Java complete')
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Unzip Java error', err)
|
|
|
|
}
|
|
|
|
chmodJava()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function unzipJavaX64Mac() {
|
|
|
|
try {
|
|
|
|
await extract(macjavax64file, { dir: homePath })
|
|
|
|
log.info('Unzip Java complete')
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Unzip Java error', err)
|
|
|
|
}
|
|
|
|
chmodJava()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function unzipJavaAarch64Mac() {
|
|
|
|
try {
|
|
|
|
await extract(macjavaaarch64file, { dir: homePath })
|
|
|
|
log.info('Unzip Java complete')
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Unzip Java error', err)
|
|
|
|
}
|
|
|
|
chmodJava()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function chmodJava() {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'chmod', ['-R', '+x', javadir],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('chmod error', err)
|
|
|
|
}
|
|
|
|
removeJavaZip()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function removeJavaZip() {
|
|
|
|
if (process.platform === 'linux') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'rm', ['-rf', linjavax64file],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('rm error', err)
|
|
|
|
}
|
|
|
|
checkQortal()
|
|
|
|
} else if (process.arch === 'arm64') {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'rm', ['-rf', linjavaarm64file],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('rm error', err)
|
|
|
|
}
|
|
|
|
checkQortal()
|
|
|
|
} else if (process.arch === 'arm') {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'rm', ['-rf', linjavaarmfile],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('rm error', err)
|
|
|
|
}
|
|
|
|
checkQortal()
|
|
|
|
}
|
|
|
|
} else if (process.platform === 'darwin') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'rm', ['-rf', macjavax64file],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('rm error', err)
|
|
|
|
}
|
|
|
|
checkQortal()
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'rm', ['-rf', macjavaaarch64file],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('rm error', err)
|
|
|
|
}
|
|
|
|
checkQortal()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function checkQortal() {
|
|
|
|
if (fs.existsSync(qortaljar)) {
|
|
|
|
isRunning('qortal.jar', (status) => {
|
|
|
|
if (status == true) {
|
|
|
|
log.info("Core is running, perfect !")
|
|
|
|
} else {
|
|
|
|
log.info("Core is not running, starting it !")
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
|
|
|
|
title: i18n.__("electron_translate_15"),
|
|
|
|
message: i18n.__("electron_translate_16"),
|
2023-05-01 13:35:45 +02:00
|
|
|
detail: i18n.__("electron_translate_17"),
|
|
|
|
checkboxLabel: i18n.__("electron_translate_28"),
|
|
|
|
checkboxChecked: false
|
2023-04-23 19:29:44 +02:00
|
|
|
}
|
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
startQortal()
|
2023-05-01 13:35:45 +02:00
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
2023-04-23 19:29:44 +02:00
|
|
|
} else {
|
2023-05-01 13:35:45 +02:00
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
2023-04-23 19:29:44 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: [i18n.__("electron_translate_18"), i18n.__("electron_translate_19")],
|
|
|
|
title: i18n.__("electron_translate_20"),
|
|
|
|
message: i18n.__("electron_translate_21"),
|
|
|
|
detail: i18n.__("electron_translate_22")
|
|
|
|
}
|
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
downloadQortal()
|
|
|
|
} else {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function downloadQortal() {
|
|
|
|
let qortalLoader = new BrowserWindow({
|
|
|
|
width: 500,
|
|
|
|
height: 500,
|
|
|
|
transparent: true,
|
|
|
|
frame: false,
|
|
|
|
alwaysOnTop: true,
|
|
|
|
show: false
|
|
|
|
})
|
|
|
|
qortalLoader.loadFile(path.join(__dirname + '/splash/download.html'))
|
|
|
|
|
|
|
|
try {
|
|
|
|
qortalLoader.show()
|
|
|
|
await electronDl.download(myWindow, zipurl, {
|
|
|
|
directory: zipdir,
|
|
|
|
onProgress: function () { log.info("Starting Download Qortal") }
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
qortalLoader.destroy()
|
|
|
|
log.info('Download Qortal error', err)
|
|
|
|
}
|
|
|
|
qortalLoader.destroy()
|
|
|
|
unzipQortal()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function unzipQortal() {
|
|
|
|
try {
|
|
|
|
await extract(zipfile, { dir: zipdir })
|
|
|
|
log.info('Unzip Qortal complete')
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Unzip Qortal error', err)
|
|
|
|
}
|
|
|
|
chmodQortal()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function chmodQortal() {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'chmod', ['-R', '+x', qortaldir],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('chmod error', err)
|
|
|
|
}
|
|
|
|
removeQortalZip()
|
|
|
|
}
|
|
|
|
|
|
|
|
async function removeQortalZip() {
|
|
|
|
try {
|
|
|
|
await spawn(
|
|
|
|
'rm', ['-rf', zipfile],
|
|
|
|
{ cwd: homePath, shell: true }
|
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('rm error', err)
|
|
|
|
}
|
2023-04-23 19:50:43 +02:00
|
|
|
checkAndStart()
|
2023-04-23 19:29:44 +02:00
|
|
|
}
|
|
|
|
|
2023-04-23 19:50:43 +02:00
|
|
|
async function checkAndStart() {
|
2023-04-23 19:29:44 +02:00
|
|
|
try {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: [i18n.__("electron_translate_13"), i18n.__("electron_translate_14")],
|
|
|
|
title: i18n.__("electron_translate_15"),
|
|
|
|
message: i18n.__("electron_translate_16"),
|
2023-05-01 13:35:45 +02:00
|
|
|
detail: i18n.__("electron_translate_17"),
|
|
|
|
checkboxLabel: i18n.__("electron_translate_28"),
|
|
|
|
checkboxChecked: false
|
2023-04-23 19:29:44 +02:00
|
|
|
}
|
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
startQortal()
|
2023-05-01 13:35:45 +02:00
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
2023-04-23 19:29:44 +02:00
|
|
|
} else {
|
2023-05-01 13:35:45 +02:00
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
2023-04-23 19:29:44 +02:00
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Sed error', err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
async function startQortal() {
|
|
|
|
if (process.platform === 'linux') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
if (fs.existsSync(linjavax64bindir)) {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', linjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (process.arch === 'arm64') {
|
|
|
|
if (fs.existsSync(linjavaarm64bindir)) {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', linjavaarm64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (process.arch === 'arm') {
|
|
|
|
if (fs.existsSync(linjavaarmbindir)) {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', linjavaarmbinfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if (process.platform === 'darwin') {
|
|
|
|
if (process.arch === 'x64') {
|
|
|
|
if (fs.existsSync(macjavax64bindir)) {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', macjavax64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (fs.existsSync(macjavaaarch64bindir)) {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', macjavaaarch64binfile, '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
await spawn(
|
2023-04-29 08:39:48 +02:00
|
|
|
'nohup', ['nice', '-n', '20', 'java', '-Djava.net.preferIPv4Stack=false', '-jar', qortaljar, qortalsettings, '1>run.log', '2>&1', '&'],
|
|
|
|
{ cwd: qortaldir, shell: true, detached: true }
|
2023-04-23 19:29:44 +02:00
|
|
|
)
|
|
|
|
} catch (err) {
|
|
|
|
log.info('Start qortal error', err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-12-25 14:39:47 +01:00
|
|
|
|
|
|
|
const editMenu = Menu.buildFromTemplate([
|
|
|
|
{
|
2023-04-23 19:29:44 +02:00
|
|
|
label: "Qortal",
|
2021-12-25 14:39:47 +01:00
|
|
|
submenu: [{
|
2023-04-23 19:29:44 +02:00
|
|
|
label: "Quit",
|
2021-12-25 14:39:47 +01:00
|
|
|
click() {
|
2022-12-07 10:41:28 +01:00
|
|
|
app.quit()
|
2021-12-25 14:39:47 +01:00
|
|
|
}
|
|
|
|
}]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
label: "Edit",
|
|
|
|
submenu: [
|
2023-04-23 19:29:44 +02:00
|
|
|
{ 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:" }
|
2021-12-25 14:39:47 +01:00
|
|
|
]
|
|
|
|
}
|
2022-12-07 10:41:28 +01:00
|
|
|
])
|
2021-12-25 14:39:47 +01:00
|
|
|
|
2022-12-07 10:41:28 +01:00
|
|
|
Menu.setApplicationMenu(editMenu)
|
2021-12-25 14:39:47 +01:00
|
|
|
|
2022-12-31 18:59:31 +01:00
|
|
|
let myWindow = null
|
|
|
|
|
2021-12-25 14:39:47 +01:00
|
|
|
function createWindow() {
|
|
|
|
myWindow = new BrowserWindow({
|
|
|
|
backgroundColor: '#eee',
|
|
|
|
width: 1280,
|
|
|
|
height: 720,
|
|
|
|
minWidth: 700,
|
|
|
|
minHeight: 640,
|
2022-12-19 18:33:45 +01:00
|
|
|
icon: path.join(__dirname + '/img/icons/png/256x256.png'),
|
2022-10-03 11:18:39 +02:00
|
|
|
title: "Qortal UI",
|
2021-12-25 14:39:47 +01:00
|
|
|
autoHideMenuBar: true,
|
|
|
|
webPreferences: {
|
2023-04-23 19:29:44 +02:00
|
|
|
nodeIntegration: true,
|
2022-12-19 18:33:45 +01:00
|
|
|
nodeIntegrationInWorker: true,
|
2021-12-25 14:39:47 +01:00
|
|
|
partition: 'persist:webviewsession',
|
2022-12-19 18:33:45 +01:00
|
|
|
enableRemoteModule: false
|
2021-12-25 14:39:47 +01:00
|
|
|
},
|
|
|
|
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-12-19 18:33:45 +01:00
|
|
|
myWindow.on('minimize', function (event) {
|
2022-10-03 11:18:39 +02:00
|
|
|
event.preventDefault()
|
|
|
|
myWindow.hide()
|
|
|
|
})
|
2022-12-19 18:33:45 +01:00
|
|
|
ipcMain.handle('dark-mode:toggle', () => {
|
|
|
|
if (nativeTheme.shouldUseDarkColors) {
|
|
|
|
nativeTheme.themeSource = 'light'
|
|
|
|
} else {
|
|
|
|
nativeTheme.themeSource = 'dark'
|
|
|
|
}
|
|
|
|
return nativeTheme.shouldUseDarkColors
|
|
|
|
})
|
|
|
|
ipcMain.handle('dark-mode:system', () => {
|
|
|
|
nativeTheme.themeSource = 'system'
|
|
|
|
})
|
2021-12-25 14:39:47 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
const createTray = () => {
|
2022-12-19 18:33:45 +01:00
|
|
|
let myTray = new Tray(path.join(__dirname + '/img/icons/png/tray/tray.png'))
|
2022-10-03 11:18:39 +02:00
|
|
|
const contextMenu = Menu.buildFromTemplate([
|
|
|
|
{
|
|
|
|
label: `Qortal UI v${app.getVersion()}`,
|
|
|
|
enabled: false,
|
2023-04-23 19:29:44 +02:00
|
|
|
},
|
2022-10-03 11:18:39 +02:00
|
|
|
{
|
|
|
|
type: 'separator',
|
2023-05-01 13:35:45 +02:00
|
|
|
},
|
|
|
|
{
|
|
|
|
label: i18n.__("electron_translate_31"),
|
|
|
|
click: function () {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
|
|
|
noLink: true,
|
|
|
|
buttons: [i18n.__("electron_translate_29"), i18n.__("electron_translate_30")],
|
|
|
|
title: i18n.__("electron_translate_31"),
|
|
|
|
message: i18n.__("electron_translate_32"),
|
|
|
|
detail: i18n.__("electron_translate_33"),
|
|
|
|
checkboxLabel: i18n.__("electron_translate_28"),
|
|
|
|
checkboxChecked: store.get('askingCore')
|
|
|
|
}
|
|
|
|
dialog.showMessageBox(dialogOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
|
|
|
} else {
|
|
|
|
store.set('askingCore', returnValue.checkboxChecked)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
})
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
type: 'separator',
|
2022-10-03 11:18:39 +02:00
|
|
|
},
|
|
|
|
{
|
2022-12-07 10:41:28 +01:00
|
|
|
label: i18n.__("electron_translate_1"),
|
2022-10-03 11:18:39 +02:00
|
|
|
click: function () {
|
|
|
|
myWindow.maximize()
|
|
|
|
myWindow.show()
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
2022-12-07 10:41:28 +01:00
|
|
|
label: i18n.__("electron_translate_2"),
|
2022-12-19 18:33:45 +01:00
|
|
|
click: function () {
|
2022-10-03 11:18:39 +02:00
|
|
|
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)
|
2023-04-23 19:29:44 +02:00
|
|
|
myTray.on("double-click", () => myWindow.maximize(), myWindow.show())
|
|
|
|
}
|
|
|
|
|
|
|
|
async function checkAll() {
|
|
|
|
if (process.platform === 'win32') {
|
|
|
|
app.setAppUserModelId("org.qortal.QortalUI")
|
2023-04-25 14:58:52 +02:00
|
|
|
await checkPort()
|
2023-04-23 19:29:44 +02:00
|
|
|
} else if (process.platform === 'darwin') {
|
|
|
|
await checkPort()
|
|
|
|
} else if (process.platform === 'linux') {
|
|
|
|
await checkPort()
|
|
|
|
} else {
|
|
|
|
const dl = new Notification({
|
|
|
|
title: "System Detector",
|
|
|
|
body: "No Supported Sytem Detected"
|
|
|
|
})
|
|
|
|
dl.show()
|
|
|
|
}
|
2021-12-25 14:39:47 +01:00
|
|
|
}
|
|
|
|
|
2022-12-07 10:41:28 +01:00
|
|
|
const isLock = app.requestSingleInstanceLock()
|
2021-12-25 14:39:47 +01:00
|
|
|
|
|
|
|
if (!isLock) {
|
2022-02-04 05:21:31 -08:00
|
|
|
app.quit()
|
2021-12-25 14:39:47 +01:00
|
|
|
} else {
|
2022-12-30 15:02:58 +01:00
|
|
|
app.on('second-instance', (event, commandLine, workingDirectory) => {
|
|
|
|
if (myWindow) {
|
|
|
|
if (myWindow.isMinimized())
|
2023-04-23 19:29:44 +02:00
|
|
|
myWindow.maximize()
|
2022-12-30 15:02:58 +01:00
|
|
|
myWindow.show()
|
|
|
|
}
|
|
|
|
})
|
2023-04-23 19:29:44 +02:00
|
|
|
app.whenReady().then(async () => {
|
2022-12-30 15:02:58 +01:00
|
|
|
createWindow()
|
|
|
|
createTray()
|
2023-04-23 19:29:44 +02:00
|
|
|
await checkAll()
|
2022-12-07 10:41:28 +01:00
|
|
|
autoUpdater.checkForUpdatesAndNotify()
|
2022-03-01 10:24:06 +01:00
|
|
|
setInterval(() => {
|
2022-12-07 10:41:28 +01:00
|
|
|
autoUpdater.checkForUpdatesAndNotify()
|
|
|
|
}, 1000 * 60 * 720)
|
2022-12-19 18:33:45 +01:00
|
|
|
app.on('activate', function () {
|
|
|
|
if (BrowserWindow.getAllWindows().length === 0) {
|
|
|
|
createWindow()
|
|
|
|
createTray()
|
|
|
|
}
|
|
|
|
})
|
2021-12-25 14:39:47 +01:00
|
|
|
})
|
|
|
|
app.on('window-all-closed', function () {
|
|
|
|
if (process.platform !== 'darwin') {
|
2023-04-23 19:29:44 +02:00
|
|
|
app.quit()
|
2021-12-25 14:39:47 +01:00
|
|
|
}
|
|
|
|
})
|
|
|
|
ipcMain.on('app_version', (event) => {
|
2022-12-30 15:02:58 +01:00
|
|
|
log.info(app.getVersion())
|
2023-02-19 17:22:57 +01:00
|
|
|
myWindow.webContents.send('app_version', { version: app.getVersion() })
|
2022-12-07 10:41:28 +01:00
|
|
|
})
|
|
|
|
autoUpdater.on('update-available', (event) => {
|
|
|
|
const downloadOpts = {
|
|
|
|
type: 'info',
|
|
|
|
buttons: ['YES', 'NO'],
|
|
|
|
title: i18n.__("electron_translate_3"),
|
|
|
|
detail: i18n.__("electron_translate_4")
|
|
|
|
}
|
|
|
|
dialog.showMessageBox(downloadOpts).then((returnValue) => {
|
|
|
|
if (returnValue.response === 0) {
|
|
|
|
autoUpdater.downloadUpdate()
|
|
|
|
const dl = new Notification({
|
|
|
|
title: i18n.__("electron_translate_11"),
|
|
|
|
body: i18n.__("electron_translate_12")
|
|
|
|
})
|
|
|
|
dl.show()
|
|
|
|
} else {
|
|
|
|
return
|
|
|
|
}
|
2021-12-25 14:39:47 +01:00
|
|
|
})
|
2022-12-07 10:41:28 +01:00
|
|
|
})
|
|
|
|
autoUpdater.on('download-progress', (progressObj) => {
|
|
|
|
myWindow.webContents.send('downloadProgress', progressObj)
|
2021-12-25 14:39:47 +01:00
|
|
|
})
|
2022-02-15 19:23:10 +01:00
|
|
|
autoUpdater.on('update-downloaded', (event) => {
|
|
|
|
const dialogOpts = {
|
|
|
|
type: 'info',
|
2022-12-07 10:41:28 +01:00
|
|
|
buttons: [i18n.__("electron_translate_5"), i18n.__("electron_translate_6")],
|
|
|
|
title: i18n.__("electron_translate_7"),
|
|
|
|
message: i18n.__("electron_translate_8"),
|
|
|
|
detail: i18n.__("electron_translate_9")
|
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({
|
2022-12-07 10:41:28 +01:00
|
|
|
title: i18n.__("electron_translate_10"),
|
2021-12-25 14:39:47 +01:00
|
|
|
body: err
|
|
|
|
})
|
2022-12-07 10:41:28 +01:00
|
|
|
n.show()
|
2021-12-25 14:39:47 +01:00
|
|
|
})
|
2022-12-19 18:33:45 +01:00
|
|
|
process.on('uncaughtException', function (err) {
|
2023-04-23 19:29:44 +02:00
|
|
|
log.info("*** WHOOPS TIME ***" + err)
|
2022-12-19 18:33:45 +01:00
|
|
|
})
|
2022-12-31 18:59:31 +01:00
|
|
|
}
|