2026-03-20 19:59:20 +02:00
|
|
|
import { app, dialog } from 'electron';
|
2026-04-18 14:35:14 -07:00
|
|
|
import { trackEvent } from './analytics';
|
2026-04-07 20:07:15 -07:00
|
|
|
|
|
|
|
|
const SEMVER_RE = /^\d+\.\d+\.\d+/;
|
2026-03-20 19:59:20 +02:00
|
|
|
|
|
|
|
|
export function setupAutoUpdater(): void {
|
|
|
|
|
if (!app.isPackaged) return;
|
|
|
|
|
|
2026-04-07 20:07:15 -07:00
|
|
|
const version = app.getVersion();
|
|
|
|
|
if (!SEMVER_RE.test(version)) {
|
|
|
|
|
console.log(`Auto-updater: skipping — "${version}" is not valid semver`);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const { autoUpdater } = require('electron-updater');
|
|
|
|
|
|
2026-03-20 19:59:20 +02:00
|
|
|
autoUpdater.autoDownload = true;
|
|
|
|
|
|
2026-04-07 20:07:15 -07:00
|
|
|
autoUpdater.on('update-available', (info: { version: string }) => {
|
2026-03-20 19:59:20 +02:00
|
|
|
console.log(`Update available: ${info.version}`);
|
2026-04-18 14:35:14 -07:00
|
|
|
trackEvent('desktop_update_available', {
|
|
|
|
|
current_version: version,
|
|
|
|
|
new_version: info.version,
|
|
|
|
|
});
|
2026-03-20 19:59:20 +02:00
|
|
|
});
|
|
|
|
|
|
2026-04-07 20:07:15 -07:00
|
|
|
autoUpdater.on('update-downloaded', (info: { version: string }) => {
|
2026-03-20 19:59:20 +02:00
|
|
|
console.log(`Update downloaded: ${info.version}`);
|
2026-04-18 14:35:14 -07:00
|
|
|
trackEvent('desktop_update_downloaded', {
|
|
|
|
|
current_version: version,
|
|
|
|
|
new_version: info.version,
|
|
|
|
|
});
|
2026-03-20 19:59:20 +02:00
|
|
|
dialog.showMessageBox({
|
|
|
|
|
type: 'info',
|
|
|
|
|
buttons: ['Restart', 'Later'],
|
|
|
|
|
defaultId: 0,
|
|
|
|
|
title: 'Update Ready',
|
|
|
|
|
message: `Version ${info.version} has been downloaded. Restart to apply the update.`,
|
2026-04-07 20:07:15 -07:00
|
|
|
}).then(({ response }: { response: number }) => {
|
2026-03-20 19:59:20 +02:00
|
|
|
if (response === 0) {
|
2026-04-18 14:35:14 -07:00
|
|
|
trackEvent('desktop_update_install_accepted', { new_version: info.version });
|
2026-03-20 19:59:20 +02:00
|
|
|
autoUpdater.quitAndInstall();
|
2026-04-18 14:35:14 -07:00
|
|
|
} else {
|
|
|
|
|
trackEvent('desktop_update_install_deferred', { new_version: info.version });
|
2026-03-20 19:59:20 +02:00
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
2026-04-07 20:07:15 -07:00
|
|
|
autoUpdater.on('error', (err: Error) => {
|
2026-03-24 18:40:07 +02:00
|
|
|
console.log('Auto-updater: update check skipped —', err.message?.split('\n')[0]);
|
2026-04-18 14:35:14 -07:00
|
|
|
trackEvent('desktop_update_error', {
|
|
|
|
|
message: err.message?.split('\n')[0],
|
|
|
|
|
});
|
2026-03-20 19:59:20 +02:00
|
|
|
});
|
|
|
|
|
|
2026-03-24 18:40:07 +02:00
|
|
|
autoUpdater.checkForUpdates().catch(() => {});
|
2026-03-20 19:59:20 +02:00
|
|
|
}
|