mirror of
https://github.com/hydralauncher/hydra.git
synced 2025-03-09 15:40:26 +00:00
feat: refactor check for updates periodically
This commit is contained in:
parent
b1ff05c456
commit
9c1b3e83e8
3 changed files with 64 additions and 41 deletions
|
@ -1,47 +1,8 @@
|
||||||
import type { AppUpdaterEvent } from "@types";
|
|
||||||
import { registerEvent } from "../register-event";
|
import { registerEvent } from "../register-event";
|
||||||
import updater, { UpdateInfo } from "electron-updater";
|
import { UpdateManager } from "@main/services/update-manager";
|
||||||
import { WindowManager } from "@main/services";
|
|
||||||
import { app } from "electron";
|
|
||||||
import { publishNotificationUpdateReadyToInstall } from "@main/services/notifications";
|
|
||||||
|
|
||||||
const { autoUpdater } = updater;
|
|
||||||
|
|
||||||
const sendEvent = (event: AppUpdaterEvent) => {
|
|
||||||
WindowManager.mainWindow?.webContents.send("autoUpdaterEvent", event);
|
|
||||||
};
|
|
||||||
|
|
||||||
const sendEventsForDebug = false;
|
|
||||||
|
|
||||||
const isAutoInstallAvailable =
|
|
||||||
process.platform !== "darwin" && process.env.PORTABLE_EXECUTABLE_FILE == null;
|
|
||||||
|
|
||||||
const mockValuesForDebug = () => {
|
|
||||||
sendEvent({ type: "update-available", info: { version: "1.3.0" } });
|
|
||||||
sendEvent({ type: "update-downloaded" });
|
|
||||||
};
|
|
||||||
|
|
||||||
const newVersionInfo = { version: "" };
|
|
||||||
|
|
||||||
const checkForUpdates = async (_event: Electron.IpcMainInvokeEvent) => {
|
const checkForUpdates = async (_event: Electron.IpcMainInvokeEvent) => {
|
||||||
autoUpdater
|
return UpdateManager.checkForUpdates();
|
||||||
.once("update-available", (info: UpdateInfo) => {
|
|
||||||
sendEvent({ type: "update-available", info });
|
|
||||||
newVersionInfo.version = info.version;
|
|
||||||
})
|
|
||||||
.once("update-downloaded", () => {
|
|
||||||
sendEvent({ type: "update-downloaded" });
|
|
||||||
publishNotificationUpdateReadyToInstall(newVersionInfo.version);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (app.isPackaged) {
|
|
||||||
autoUpdater.autoDownload = isAutoInstallAvailable;
|
|
||||||
autoUpdater.checkForUpdates();
|
|
||||||
} else if (sendEventsForDebug) {
|
|
||||||
mockValuesForDebug();
|
|
||||||
}
|
|
||||||
|
|
||||||
return isAutoInstallAvailable;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
registerEvent("checkForUpdates", checkForUpdates);
|
registerEvent("checkForUpdates", checkForUpdates);
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { sleep } from "@main/helpers";
|
||||||
import { DownloadManager } from "./download";
|
import { DownloadManager } from "./download";
|
||||||
import { watchProcesses } from "./process-watcher";
|
import { watchProcesses } from "./process-watcher";
|
||||||
import { AchievementWatcherManager } from "./achievements/achievement-watcher-manager";
|
import { AchievementWatcherManager } from "./achievements/achievement-watcher-manager";
|
||||||
|
import { UpdateManager } from "./update-manager";
|
||||||
|
|
||||||
export const startMainLoop = async () => {
|
export const startMainLoop = async () => {
|
||||||
// eslint-disable-next-line no-constant-condition
|
// eslint-disable-next-line no-constant-condition
|
||||||
|
@ -11,6 +12,7 @@ export const startMainLoop = async () => {
|
||||||
DownloadManager.watchDownloads(),
|
DownloadManager.watchDownloads(),
|
||||||
AchievementWatcherManager.watchAchievements(),
|
AchievementWatcherManager.watchAchievements(),
|
||||||
DownloadManager.getSeedStatus(),
|
DownloadManager.getSeedStatus(),
|
||||||
|
UpdateManager.checkForUpdatePeriodically(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
await sleep(1500);
|
await sleep(1500);
|
||||||
|
|
60
src/main/services/update-manager.ts
Normal file
60
src/main/services/update-manager.ts
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
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 async 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 async checkForUpdatePeriodically() {
|
||||||
|
if (this.checkTick % 2000 == 0) {
|
||||||
|
this.checkForUpdates();
|
||||||
|
}
|
||||||
|
this.checkTick++;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue