You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
80 lines
2.5 KiB
import { app, ipcMain } from 'electron'; |
|
import { type ProgressInfo, type UpdateDownloadedEvent, autoUpdater } from 'electron-updater'; |
|
import * as mainWin from '../win/mainWin'; |
|
|
|
export function update() { |
|
// When set to false, the update download will be triggered through the API |
|
autoUpdater.autoDownload = false; |
|
autoUpdater.disableWebInstaller = false; |
|
autoUpdater.allowDowngrade = false; |
|
// start check |
|
autoUpdater.on('checking-for-update', function () { |
|
console.log('Checking for update.'); |
|
}); |
|
// update available |
|
autoUpdater.on('update-available', (arg) => { |
|
mainWin.sendEuUpdateCanAvailable(arg, true); |
|
// win.webContents.send('eu:update-can-available', { |
|
// update: true, |
|
// version: app.getVersion(), |
|
// newVersion: arg?.version, |
|
// }); |
|
}); |
|
// update not available |
|
autoUpdater.on('update-not-available', (arg) => { |
|
mainWin.sendEuUpdateCanAvailable(arg, false); |
|
// win.webContents.send('eu:update-can-available', { |
|
// update: false, |
|
// version: app.getVersion(), |
|
// newVersion: arg?.version, |
|
// }); |
|
}); |
|
|
|
// Checking for updates |
|
ipcMain.handle('eu:check-update', async () => { |
|
if (!app.isPackaged) { |
|
const error = new Error('The update feature is only available after the package.'); |
|
return { message: error.message, error }; |
|
} |
|
|
|
try { |
|
return await autoUpdater.checkForUpdatesAndNotify(); |
|
} catch (error) { |
|
return { message: 'Network error', error }; |
|
} |
|
}); |
|
|
|
// Start downloading and feedback on progress |
|
ipcMain.handle('eu:start-download', (event) => { |
|
startDownload( |
|
(error, progressInfo) => { |
|
if (error) { |
|
// feedback download error message |
|
event.sender.send('eu:update-error', { message: error.message, error }); |
|
} else { |
|
// feedback update progress message |
|
event.sender.send('eu:download-progress', progressInfo); |
|
} |
|
}, |
|
() => { |
|
// feedback update downloaded message |
|
event.sender.send('eu:update-downloaded'); |
|
}, |
|
); |
|
}); |
|
|
|
// Install now |
|
ipcMain.handle('eu:quit-and-install', () => { |
|
autoUpdater.quitAndInstall(false, true); |
|
}); |
|
} |
|
|
|
function startDownload( |
|
callback: (error: Error | null, info: ProgressInfo | null) => void, |
|
complete: (event: UpdateDownloadedEvent) => void, |
|
) { |
|
autoUpdater.on('download-progress', (info) => callback(null, info)); |
|
autoUpdater.on('error', (error) => callback(error, null)); |
|
autoUpdater.on('update-downloaded', complete); |
|
autoUpdater.downloadUpdate(); |
|
}
|
|
|