77 lines
2.3 KiB
TypeScript
77 lines
2.3 KiB
TypeScript
import { app, ipcMain } from "electron";
|
|
import { type ProgressInfo, type UpdateDownloadedEvent, autoUpdater } from "electron-updater";
|
|
|
|
export function update(win: Electron.BrowserWindow) {
|
|
// 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 () {});
|
|
// update available
|
|
autoUpdater.on("update-available", (arg) => {
|
|
win.webContents.send("update-can-available", {
|
|
update: true,
|
|
version: app.getVersion(),
|
|
newVersion: arg?.version,
|
|
});
|
|
});
|
|
// update not available
|
|
autoUpdater.on("update-not-available", (arg) => {
|
|
win.webContents.send("update-can-available", {
|
|
update: false,
|
|
version: app.getVersion(),
|
|
newVersion: arg?.version,
|
|
});
|
|
});
|
|
|
|
// Checking for updates
|
|
ipcMain.handle("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("start-download", (event) => {
|
|
startDownload(
|
|
(error, progressInfo) => {
|
|
if (error) {
|
|
// feedback download error message
|
|
event.sender.send("update-error", { message: error.message, error });
|
|
} else {
|
|
// feedback update progress message
|
|
event.sender.send("download-progress", progressInfo);
|
|
}
|
|
},
|
|
() => {
|
|
// feedback update downloaded message
|
|
event.sender.send("update-downloaded");
|
|
}
|
|
);
|
|
});
|
|
|
|
// Install now
|
|
ipcMain.handle("quit-and-install", () => {
|
|
autoUpdater.quitAndInstall(false, true);
|
|
});
|
|
}
|
|
|
|
function startDownload(
|
|
callback: (error: Error | null, info: ProgressInfo) => 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();
|
|
}
|