62 lines
1.9 KiB
JavaScript
62 lines
1.9 KiB
JavaScript
const { autoUpdater } = require('electron-updater');
|
|
const log = require('electron-log');
|
|
|
|
autoUpdater.logger = log;
|
|
autoUpdater.autoDownload = false;
|
|
autoUpdater.autoInstallOnAppQuit = true;
|
|
|
|
function checkForUpdates(splashWindow) {
|
|
return new Promise((resolve) => {
|
|
function sendToSplash(js) {
|
|
if (splashWindow && !splashWindow.isDestroyed()) {
|
|
splashWindow.webContents.executeJavaScript(js).catch(() => {});
|
|
}
|
|
}
|
|
|
|
autoUpdater.on('checking-for-update', () => {
|
|
sendToSplash('setStatus("Checking for updates...")');
|
|
});
|
|
|
|
autoUpdater.on('update-available', () => {
|
|
sendToSplash('setStatus("Downloading update...")');
|
|
autoUpdater.downloadUpdate();
|
|
});
|
|
|
|
autoUpdater.on('download-progress', (progress) => {
|
|
const percent = Math.round(progress.percent);
|
|
sendToSplash(`setProgress(${percent})`);
|
|
sendToSplash(`setStatus("Downloading update... ${percent}%")`);
|
|
});
|
|
|
|
autoUpdater.on('update-downloaded', () => {
|
|
sendToSplash('setStatus("Installing update...")');
|
|
sendToSplash('setProgress(100)');
|
|
setTimeout(() => {
|
|
autoUpdater.quitAndInstall();
|
|
}, 1500);
|
|
});
|
|
|
|
autoUpdater.on('update-not-available', () => {
|
|
sendToSplash('setStatus("Up to date!")');
|
|
sendToSplash('hideProgress()');
|
|
setTimeout(() => resolve(false), 1000);
|
|
});
|
|
|
|
autoUpdater.on('error', (err) => {
|
|
log.error('Auto-updater error:', err);
|
|
sendToSplash('setStatus("Update check failed")');
|
|
sendToSplash('hideProgress()');
|
|
setTimeout(() => resolve(false), 2000);
|
|
});
|
|
|
|
autoUpdater.checkForUpdates().catch((err) => {
|
|
log.error('checkForUpdates failed:', err);
|
|
sendToSplash('setStatus("Update check failed")');
|
|
sendToSplash('hideProgress()');
|
|
setTimeout(() => resolve(false), 2000);
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = { checkForUpdates };
|