mirror of
https://github.com/heyman/heynote.git
synced 2024-11-25 09:23:17 +01:00
e887d7e35f
Call setForceQuite() before autoUpdater.quitAndInstall() to make sure auto updating works when Tray/Menu Bar setting is turned on.
103 lines
2.9 KiB
TypeScript
103 lines
2.9 KiB
TypeScript
import { autoUpdater } from "electron-updater"
|
|
import { app, dialog, ipcMain } from "electron"
|
|
import CONFIG from "../config"
|
|
|
|
import {
|
|
UPDATE_AVAILABLE_EVENT,
|
|
UPDATE_NOT_AVAILABLE_EVENT,
|
|
UPDATE_DOWNLOADED,
|
|
UPDATE_DOWNLOAD_PROGRESS,
|
|
UPDATE_ERROR,
|
|
UPDATE_START_DOWNLOAD,
|
|
UPDATE_INSTALL_AND_RESTART,
|
|
UPDATE_CHECK_FOR_UPDATES,
|
|
} from '../constants'
|
|
import { setForceQuit } from "./index";
|
|
|
|
|
|
// will reference the main window
|
|
let window
|
|
|
|
// configure logging
|
|
const log = require('electron-log');
|
|
|
|
autoUpdater.logger = log
|
|
autoUpdater.logger.transports.file.level = "info"
|
|
|
|
autoUpdater.autoDownload = false
|
|
autoUpdater.allowDowngrade = true
|
|
|
|
autoUpdater.on('error', (error) => {
|
|
window?.webContents.send(UPDATE_ERROR, error == null ? "unknown" : (error.stack || error).toString())
|
|
//dialog.showErrorBox('Error: ', error == null ? "unknown" : (error.stack || error).toString())
|
|
})
|
|
|
|
autoUpdater.on('update-available', (info) => {
|
|
window?.webContents.send(UPDATE_AVAILABLE_EVENT, {
|
|
version: info.version,
|
|
releaseDate: info.releaseDate,
|
|
currentVersion: app.getVersion(),
|
|
})
|
|
})
|
|
|
|
autoUpdater.on('update-not-available', () => {
|
|
window?.webContents.send(UPDATE_NOT_AVAILABLE_EVENT)
|
|
})
|
|
|
|
autoUpdater.on('update-downloaded', () => {
|
|
window?.webContents.send(UPDATE_DOWNLOADED)
|
|
})
|
|
|
|
autoUpdater.on('download-progress', (info) => {
|
|
window?.webContents.send(UPDATE_DOWNLOAD_PROGRESS, {
|
|
percent: info.percent,
|
|
total: info.total,
|
|
transferred: info.transferred,
|
|
bytesPerSecond: info.bytesPerSecond,
|
|
})
|
|
})
|
|
|
|
// handle messages from Vue components
|
|
ipcMain.handle(UPDATE_START_DOWNLOAD, () => {
|
|
autoUpdater.downloadUpdate()
|
|
})
|
|
|
|
ipcMain.handle(UPDATE_INSTALL_AND_RESTART, () => {
|
|
setImmediate(() => {
|
|
// make sure we can quite the app if it's in the Tray/Menu bar
|
|
setForceQuit()
|
|
autoUpdater.quitAndInstall(true, true)
|
|
})
|
|
})
|
|
|
|
|
|
export function checkForUpdates() {
|
|
autoUpdater.allowPrerelease = CONFIG.get("settings.allowBetaVersions")
|
|
autoUpdater.checkForUpdates()
|
|
// for development, the autoUpdater will not work, so we need to trigger the event manually
|
|
if (process.env.NODE_ENV === "development") {
|
|
window?.webContents.send(UPDATE_NOT_AVAILABLE_EVENT)
|
|
}
|
|
}
|
|
|
|
ipcMain.handle(UPDATE_CHECK_FOR_UPDATES, () => {
|
|
checkForUpdates()
|
|
})
|
|
|
|
export function initializeAutoUpdate(win) {
|
|
window = win
|
|
|
|
/**
|
|
* To debug auto updates (actually downloading an update won't work),
|
|
* uncomment the lines below, and create a dev-app-update.yml with the content:
|
|
*
|
|
* owner: heyman
|
|
* repo: heynote
|
|
* provider: github
|
|
*/
|
|
// Useful for some dev/debugging tasks, but download can
|
|
// not be validated becuase dev app is not signed
|
|
//autoUpdater.updateConfigPath = "/Users/heyman/projects/heynote/dev-app-update.yml" //path.join(__dirname, 'dev-app-update.yml');
|
|
//autoUpdater.forceDevUpdateConfig = true;
|
|
}
|