mirror of
https://github.com/hydralauncher/hydra.git
synced 2026-01-18 16:53:57 +00:00
61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import updater, { UpdateInfo } from "electron-updater";
|
|
import { logger, WindowManager } from "@main/services";
|
|
import { AppUpdaterEvent } from "@types";
|
|
import { app } from "electron";
|
|
import { publishNotificationUpdateReadyToInstall } from "@main/services/notifications";
|
|
|
|
const isAutoInstallAvailable =
|
|
process.platform !== "darwin" && process.env.PORTABLE_EXECUTABLE_FILE == null;
|
|
|
|
const { autoUpdater } = updater;
|
|
const sendEventsForDebug = false;
|
|
|
|
export class UpdateManager {
|
|
private static hasNotified = false;
|
|
private static newVersion = "";
|
|
private static checkTick = 0;
|
|
|
|
private static mockValuesForDebug() {
|
|
this.sendEvent({ type: "update-available", info: { version: "1.3.0" } });
|
|
this.sendEvent({ type: "update-downloaded" });
|
|
}
|
|
|
|
private static sendEvent(event: AppUpdaterEvent) {
|
|
WindowManager.mainWindow?.webContents.send("autoUpdaterEvent", event);
|
|
}
|
|
|
|
public static checkForUpdates() {
|
|
autoUpdater
|
|
.once("update-available", (info: UpdateInfo) => {
|
|
this.sendEvent({ type: "update-available", info });
|
|
this.newVersion = info.version;
|
|
})
|
|
.once("update-downloaded", () => {
|
|
this.sendEvent({ type: "update-downloaded" });
|
|
|
|
if (!this.hasNotified) {
|
|
this.hasNotified = true;
|
|
publishNotificationUpdateReadyToInstall(this.newVersion);
|
|
}
|
|
});
|
|
|
|
if (app.isPackaged) {
|
|
autoUpdater.autoDownload = isAutoInstallAvailable;
|
|
autoUpdater.checkForUpdates().then((result) => {
|
|
logger.log(`Check for updates result: ${result}`);
|
|
});
|
|
} else if (sendEventsForDebug) {
|
|
this.mockValuesForDebug();
|
|
}
|
|
|
|
return isAutoInstallAvailable;
|
|
}
|
|
|
|
public static checkForUpdatePeriodically() {
|
|
if (this.checkTick % 2000 == 0) {
|
|
this.checkForUpdates();
|
|
}
|
|
this.checkTick++;
|
|
}
|
|
}
|