稳定测试版
This commit is contained in:
69
main/updater.js
Normal file
69
main/updater.js
Normal file
@@ -0,0 +1,69 @@
|
||||
// main/updater.js
|
||||
const { app, BrowserWindow, ipcMain } = require('electron')
|
||||
const { autoUpdater } = require('electron-updater')
|
||||
const log = require('electron-log')
|
||||
Object.assign(console, log.functions)
|
||||
|
||||
const updaterState = {
|
||||
updateInProgress: false,
|
||||
updateDownloaded: false,
|
||||
pendingNavs: [],
|
||||
}
|
||||
function flushPendingNavs() {
|
||||
const fns = updaterState.pendingNavs.slice()
|
||||
updaterState.pendingNavs = []
|
||||
for (const fn of fns) try { fn() } catch (e) { console.warn('[Nav defer err]', e) }
|
||||
}
|
||||
function broadcast(channel, payload) {
|
||||
BrowserWindow.getAllWindows().forEach(w => !w.isDestroyed() && w.webContents.send(channel, payload))
|
||||
}
|
||||
|
||||
function registerUpdater() {
|
||||
autoUpdater.logger = log
|
||||
autoUpdater.logger.transports.file.level = 'info'
|
||||
autoUpdater.autoDownload = true
|
||||
autoUpdater.autoInstallOnAppQuit = false
|
||||
|
||||
autoUpdater.on('checking-for-update', () => console.log('[updater] checking...'))
|
||||
autoUpdater.on('update-available', (info) => {
|
||||
updaterState.updateInProgress = true
|
||||
console.log('[updater] available', info.version)
|
||||
broadcast('update:available', info)
|
||||
})
|
||||
autoUpdater.on('update-not-available', () => {
|
||||
console.log('[updater] not-available')
|
||||
updaterState.updateInProgress = false
|
||||
flushPendingNavs()
|
||||
})
|
||||
let lastSend = 0
|
||||
autoUpdater.on('download-progress', (p) => {
|
||||
updaterState.updateInProgress = true
|
||||
const now = Date.now()
|
||||
if (now - lastSend > 150) {
|
||||
lastSend = now
|
||||
broadcast('update:progress', p)
|
||||
}
|
||||
const win = BrowserWindow.getAllWindows()[0]
|
||||
if (win) win.setProgressBar(p.percent / 100)
|
||||
})
|
||||
autoUpdater.on('update-downloaded', (info) => {
|
||||
console.log('[updater] downloaded')
|
||||
updaterState.updateInProgress = true
|
||||
updaterState.updateDownloaded = true
|
||||
broadcast('update:downloaded', info)
|
||||
// 想要自动安装:autoUpdater.quitAndInstall(false, true)
|
||||
})
|
||||
autoUpdater.on('error', (err) => {
|
||||
console.error('[updater] error', err)
|
||||
broadcast('update:error', { message: String(err) })
|
||||
updaterState.updateInProgress = false
|
||||
flushPendingNavs()
|
||||
})
|
||||
|
||||
ipcMain.handle('update:quitAndInstall', () => autoUpdater.quitAndInstall(false, true))
|
||||
ipcMain.handle('update:checkNow', () => autoUpdater.checkForUpdates())
|
||||
|
||||
autoUpdater.checkForUpdates()
|
||||
}
|
||||
|
||||
module.exports = { registerUpdater, updaterState }
|
||||
Reference in New Issue
Block a user