Added auto updating.

Ask user about updating.

Fix quit and install process.
Removed unnecessary logs

Added progress bar when selecting download and install.

Added releasing instructions

Minor fix
This commit is contained in:
Mikunj 2019-04-12 15:15:16 +10:00
parent b9a60aed76
commit f3884a3ef0
10 changed files with 340 additions and 38 deletions

2
.gitignore vendored
View File

@ -29,3 +29,5 @@ bin/*
.env
/downloads
dev-app-update.yml

13
RELEASING.md Normal file
View File

@ -0,0 +1,13 @@
# Releasing
Releasing the application to work with auto update is very simple.
1. Increment the application version in `package.json`.
2. Push changes to master to trigger github actions to build the binaries.
- Ensure that `.yml` files aren't being left out in the artifacts. These are needed for auto-update to work correctly.
3. Create a github release with the **tag** being in the format `v[Version]`.
- E.g if the version was `2.1.1` then the github tag would be `v2.1.1`
4. Add release notes
5. Publish the release!

208
package-lock.json generated
View File

@ -2196,8 +2196,7 @@
"@types/node": {
"version": "10.14.4",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.4.tgz",
"integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg==",
"dev": true
"integrity": "sha512-DT25xX/YgyPKiHFOpNuANIQIVvYEwCWXgK2jYYwqgaMrYE6+tq+DtmMwlD3drl6DJbUwtlIDnn0d7tIn/EbXBg=="
},
"@types/q": {
"version": "1.5.2",
@ -2205,6 +2204,14 @@
"integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==",
"dev": true
},
"@types/semver": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.1.0.tgz",
"integrity": "sha512-pOKLaubrAEMUItGNpgwl0HMFPrSAFic8oSVIvfu1UwcgGNmNyK9gyhBHKmBnUTwwVvpZfkzUC0GaMgnL6P86uA==",
"requires": {
"@types/node": "*"
}
},
"@vue/component-compiler-utils": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.6.0.tgz",
@ -2655,6 +2662,16 @@
"lru-cache": "^5.1.1"
}
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@ -2754,7 +2771,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
@ -3703,6 +3719,16 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -4736,6 +4762,16 @@
"parse-json": "^4.0.0"
},
"dependencies": {
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
@ -5546,6 +5582,16 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"json5": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
@ -6310,6 +6356,14 @@
}
}
},
"electron-progressbar": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/electron-progressbar/-/electron-progressbar-1.2.0.tgz",
"integrity": "sha512-I89HaI61SF5wl8c4p62UU3RXhL0xByzl4XH/miwb1e/VNUtRj5WCe/wJ5pNikfC01+/4aAOlNsbmkfsvQjtW6Q==",
"requires": {
"extend": "^3.0.1"
}
},
"electron-publish": {
"version": "22.2.0",
"resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-22.2.0.tgz",
@ -6389,6 +6443,64 @@
"integrity": "sha512-LWOvuJ80pLO3FtFqTcGuXB0dxdMtzSCkRmbXdY5mHUvXRQGor3sTVmyfU70aD2yF5i+fbHz52ncWr5T3xUYHlA==",
"dev": true
},
"electron-updater": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.2.2.tgz",
"integrity": "sha512-e/OZhr5tLW0GcgmpR5wD0ImxgKMa8pPoNWRcwRyMzTL9pGej7+ORp0t9DtI5ZBHUbObIoEbrk+6EDGUGtJf+aA==",
"requires": {
"@types/semver": "^7.1.0",
"builder-util-runtime": "8.6.0",
"fs-extra": "^8.1.0",
"js-yaml": "^3.13.1",
"lazy-val": "^1.0.4",
"lodash.isequal": "^4.5.0",
"pako": "^1.0.11",
"semver": "^7.1.3"
},
"dependencies": {
"builder-util-runtime": {
"version": "8.6.0",
"resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.6.0.tgz",
"integrity": "sha512-WTDhTUVrm7zkFyd6Qn7AXgmWifjpZ/fYnEdV3XCOIDMNNb/KPddBTbQ8bUlxxVeuOYlhGpcLUypG+4USdGL1ww==",
"requires": {
"debug": "^4.1.1",
"sax": "^1.2.4"
}
},
"debug": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
"integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
"requires": {
"ms": "^2.1.1"
}
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
"pako": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
"semver": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.1.3.tgz",
"integrity": "sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA=="
}
}
},
"electron-window-state": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/electron-window-state/-/electron-window-state-5.0.3.tgz",
@ -6935,8 +7047,7 @@
"esprima": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
"dev": true
"integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
},
"esquery": {
"version": "1.0.1",
@ -7114,10 +7225,9 @@
}
},
"extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
"integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ="
},
"extend-shallow": {
"version": "3.0.2",
@ -7593,9 +7703,9 @@
},
"dependencies": {
"graceful-fs": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz",
"integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q=="
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
"integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ=="
}
}
},
@ -9649,9 +9759,9 @@
"dev": true
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"version": "3.12.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
"integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
@ -9804,8 +9914,7 @@
"lazy-val": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz",
"integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==",
"dev": true
"integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q=="
},
"lcid": {
"version": "1.0.0",
@ -9930,6 +10039,11 @@
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
"lodash.isequal": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
"integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"lodash.isfinite": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz",
@ -12677,6 +12791,16 @@
"integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==",
"dev": true
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
},
"json5": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
@ -13285,8 +13409,7 @@
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==",
"dev": true
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
},
"schema-utils": {
"version": "1.0.0",
@ -13297,6 +13420,38 @@
"ajv": "^6.1.0",
"ajv-errors": "^1.0.0",
"ajv-keywords": "^3.1.0"
},
"dependencies": {
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
"integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==",
"dev": true,
"requires": {
"fast-deep-equal": "^2.0.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz",
"integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==",
"dev": true
},
"fast-deep-equal": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
"integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
"dev": true
},
"json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
"dev": true
}
}
},
"scss-tokenizer": {
@ -13934,8 +14089,7 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"sshpk": {
"version": "1.14.2",
@ -14292,6 +14446,18 @@
"stable": "^0.1.8",
"unquote": "~1.1.1",
"util.promisify": "~1.0.0"
},
"dependencies": {
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
}
}
}
},
"table": {

View File

@ -3,8 +3,15 @@
"version": "1.3.3",
"description": "Modern GUI interface for Loki Currency",
"productName": "Loki Electron Wallet",
"repository": {
"type": "git",
"url": "https://github.com/loki-project/loki-electron-gui-wallet.git"
},
"cordovaId": "com.lokinetwork.wallet",
"author": "Loki",
"author": {
"name": "Loki",
"email": "team@loki.network"
},
"private": true,
"scripts": {
"dev": "quasar dev -m electron -t mat",
@ -17,6 +24,8 @@
"dependencies": {
"axios": "^0.18.1",
"electron-is-dev": "^1.0.1",
"electron-progressbar": "^1.2.0",
"electron-updater": "^4.2.0",
"electron-window-state": "^5.0.3",
"flag-icon-css": "^3.3.0",
"fs-extra": "^8.1.0",

View File

@ -181,10 +181,7 @@ module.exports = function (ctx) {
copyright: "Copyright © 2018-2019 Loki Project, 2018 Ryo Currency Project",
afterSign: "build/notarize.js",
artifactName: "loki-electron-wallet-${version}-${os}.${ext}",
// directories: {
// buildResources: "src-electron/build"
// },
publish: "github",
linux: {
target: ["AppImage"],
@ -215,7 +212,8 @@ module.exports = function (ctx) {
files: [
"!build/*.js",
"!.env"
"!.env",
"!dev-app-update.yml"
],
extraResources: [

View File

@ -0,0 +1,86 @@
import { dialog } from "electron"
import isDev from "electron-is-dev"
import { autoUpdater } from "electron-updater"
import ProgressBar from "electron-progressbar"
let progressBar = null
let isUpdating = false
let downloadAndInstall = false
function checkForUpdate (onQuitAndInstall) {
// Disable for development
if (isDev) {
return
}
autoUpdater.logger = console
autoUpdater.autoDownload = false
autoUpdater.on("error", (err) => {
if (isUpdating) {
dialog.showErrorBox("Update Error: ", err == null ? "unknown" : err.message)
isUpdating = false
console.error("Error in auto-updater.", err.message)
}
})
autoUpdater.on("update-available", info => {
console.log(`Update available: ${info.version}`)
const message = `Update ${info.version} found. Do you want to download the update?`
const detail = `View the release notes at: https://github.com/loki-project/loki-electron-gui-wallet/releases/tag/v${info.version}`
dialog.showMessageBox({
type: "info",
title: "Update available",
message,
detail,
buttons: ["Download and Install", "Download and Install Later", "No"],
defaultId: 0
}, (buttonIndex) => {
// Download and install
if (buttonIndex === 0) {
downloadAndInstall = true
if (!progressBar) {
progressBar = new ProgressBar({
indeterminate: false,
title: "Downloading...",
text: `Downloading wallet v${info.version}`
})
}
}
// Download
if (buttonIndex !== 2) {
isUpdating = true
autoUpdater.downloadUpdate()
}
})
})
autoUpdater.on("download-progress", progress => {
if (progressBar) {
progressBar.value = progress.percent
}
})
autoUpdater.on("update-downloaded", () => {
console.log("Update downloaded")
isUpdating = false
if (progressBar) {
progressBar.setCompleted()
progressBar = null
}
// If download and install was selected then quit and install
if (downloadAndInstall && onQuitAndInstall) {
onQuitAndInstall(autoUpdater)
downloadAndInstall = false
}
})
autoUpdater.checkForUpdates()
}
export { checkForUpdate }

View File

@ -1,6 +1,7 @@
import { app, ipcMain, BrowserWindow, Menu, dialog } from "electron"
import { version, productName } from "../../package.json"
import { Backend } from "./modules/backend"
import { checkForUpdate } from "./auto-updater"
import menuTemplate from "./menu"
import isDev from "electron-is-dev"
const portscanner = require("portscanner")
@ -21,6 +22,7 @@ if (process.env.PROD) {
let mainWindow, backend
let showConfirmClose = true
let forceQuit = false
let installUpdate = false
const title = `${productName} v${version}`
@ -60,6 +62,9 @@ function createWindow () {
})
mainWindow.on("close", (e) => {
// Don't ask for confirmation if we're installing an update
if (installUpdate) { return }
if (process.platform === "darwin") {
if (forceQuit) {
forceQuit = false
@ -90,14 +95,11 @@ function createWindow () {
// In dev mode, this will launch a blank white screen
if (restart && !isDev) app.relaunch()
if (backend) {
backend.quit().then(() => {
backend = null
app.quit()
})
} else {
const promise = backend ? backend.quit() : Promise.resolve()
promise.then(() => {
backend = null
app.quit()
}
})
})
mainWindow.webContents.on("did-finish-load", () => {
@ -113,7 +115,11 @@ function createWindow () {
token: buffer.toString("hex")
}
portscanner.checkPortStatus(config.port, "127.0.0.1", (e, status) => {
portscanner.checkPortStatus(config.port, "127.0.0.1", (error, status) => {
if (error) {
console.error(error)
}
if (status === "closed") {
backend = new Backend(mainWindow)
backend.init(config)
@ -147,6 +153,18 @@ function createWindow () {
}
app.on("ready", () => {
checkForUpdate(autoUpdater => {
if (mainWindow) {
mainWindow.webContents.send("showQuitScreen")
}
const promise = backend ? backend.quit() : Promise.resolve()
promise.then(() => {
installUpdate = true
backend = null
autoUpdater.quitAndInstall()
})
})
if (process.platform === "darwin") {
const menu = Menu.buildFromTemplate(menuTemplate)
Menu.setApplicationMenu(menu)
@ -169,6 +187,11 @@ app.on("activate", () => {
})
app.on("before-quit", () => {
// Quit instantly if we are installing an update
if (installUpdate) {
return
}
if (process.platform === "darwin") {
forceQuit = true
} else {

View File

@ -951,12 +951,12 @@ export class WalletRPC {
"address": address,
"account_index": 0,
"priority": priority,
"blink": priority == 0x626c6e6b ? true : false,
"blink": priority == 0x626c6e6b,
"ring_size": 10
} : {
"destinations": [{ "amount": amount, "address": address }],
"priority": priority,
"blink": priority == 0x626c6e6b ? true : false,
"blink": priority == 0x626c6e6b,
"ring_size": 10
}

View File

@ -182,7 +182,6 @@ export default {
}
</script>
<style lang="scss">
.check-transaction {
.description {

View File

@ -48,6 +48,12 @@ export class Gateway extends EventEmitter {
ipcRenderer.on("confirmClose", () => {
this.confirmClose(i18n.t("dialog.exit.message"))
})
ipcRenderer.on("showQuitScreen", () => {
if (this.router) {
this.router.replace({ path: "/quit" })
}
})
}
open () {