updater.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { autoUpdater } from 'electron-updater'
  2. import { BrowserWindow, ipcMain } from 'electron'
  3. let mainWindow: BrowserWindow | null = null
  4. export function initUpdater(win: BrowserWindow) {
  5. mainWindow = win
  6. autoUpdater.autoDownload = false
  7. autoUpdater.autoInstallOnAppQuit = true
  8. autoUpdater.on('checking-for-update', () => {
  9. sendUpdateStatus('checking')
  10. })
  11. autoUpdater.on('update-available', (info) => {
  12. sendUpdateStatus('available', {
  13. version: info.version,
  14. releaseNotes: info.releaseNotes,
  15. })
  16. })
  17. autoUpdater.on('update-not-available', () => {
  18. sendUpdateStatus('not-available')
  19. })
  20. autoUpdater.on('download-progress', (progress) => {
  21. sendUpdateStatus('downloading', {
  22. percent: Math.round(progress.percent),
  23. transferred: progress.transferred,
  24. total: progress.total,
  25. })
  26. })
  27. autoUpdater.on('update-downloaded', () => {
  28. sendUpdateStatus('downloaded')
  29. })
  30. autoUpdater.on('error', (err) => {
  31. sendUpdateStatus('error', { message: err.message })
  32. })
  33. ipcMain.on('updater-check', () => {
  34. autoUpdater.checkForUpdates()
  35. })
  36. ipcMain.on('updater-download', () => {
  37. autoUpdater.downloadUpdate()
  38. })
  39. ipcMain.on('updater-install', () => {
  40. autoUpdater.quitAndInstall()
  41. })
  42. autoUpdater.checkForUpdates()
  43. }
  44. function sendUpdateStatus(status: string, data?: any) {
  45. mainWindow?.webContents.send('updater-status', { status, ...data })
  46. }