97 lines
3.1 KiB
TypeScript
97 lines
3.1 KiB
TypeScript
/*
|
|
* SPDX-License-Identifier: GPL-3.0
|
|
* Aerocord, a vesktop fork for older microsoft NT releases such as NT 6.0, 6.1, 6.2 and 6.3.
|
|
* Credits to vendicated and the rest of the vesktop contribuitors for making Vesktop!
|
|
*/
|
|
|
|
// lets just use our own c# updater cuz why not
|
|
import { app, BrowserWindow, shell } from "electron";
|
|
import { Settings, State } from "main/settings";
|
|
import { handle } from "main/utils/ipcWrappers";
|
|
import { makeLinksOpenExternally } from "main/utils/makeLinksOpenExternally";
|
|
import { githubGet, ReleaseData } from "main/utils/vencordLoader";
|
|
import { join } from "path";
|
|
import { IpcEvents } from "shared/IpcEvents";
|
|
import { ICON_PATH, VIEW_DIR } from "shared/paths";
|
|
|
|
export interface UpdateData {
|
|
currentVersion: string;
|
|
latestVersion: string;
|
|
release: ReleaseData;
|
|
}
|
|
|
|
let updateData: UpdateData;
|
|
|
|
handle(IpcEvents.UPDATER_GET_DATA, () => updateData);
|
|
handle(IpcEvents.UPDATER_DOWNLOAD, () => {
|
|
const updaterPath = join(app.getPath('exe'), '..', 'Updater.exe')
|
|
shell.openPath(updaterPath);
|
|
});
|
|
|
|
handle(IpcEvents.UPDATE_IGNORE, () => {
|
|
State.store.skippedUpdate = updateData.latestVersion;
|
|
});
|
|
|
|
function isOutdated(oldVersion: string, newVersion: string) {
|
|
const oldParts = oldVersion.split(".");
|
|
const newParts = newVersion.split(".");
|
|
|
|
if (oldParts.length !== newParts.length)
|
|
throw new Error(`Incompatible version strings (old: ${oldVersion}, new: ${newVersion})`);
|
|
|
|
for (let i = 0; i < oldParts.length; i++) {
|
|
const oldPart = Number(oldParts[i]);
|
|
const newPart = Number(newParts[i]);
|
|
|
|
if (isNaN(oldPart) || isNaN(newPart))
|
|
throw new Error(`Invalid version string (old: ${oldVersion}, new: ${newVersion})`);
|
|
|
|
if (oldPart < newPart) return true;
|
|
if (oldPart > newPart) return false;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
export async function checkUpdates() {
|
|
if (Settings.store.checkUpdates === false) return;
|
|
|
|
try { // make this work with gitea cuz FUK GITHUB!
|
|
const raw = await fetch("https://git.randomserver.top/api/v1/repos/aiek/aerocord/releases/latest");
|
|
const data = await raw.json();
|
|
|
|
const oldVersion = app.getVersion();
|
|
const newVersion = data.tag_name.replace(/^v/, "");
|
|
updateData = {
|
|
currentVersion: oldVersion,
|
|
latestVersion: newVersion,
|
|
release: data
|
|
};
|
|
|
|
|
|
if (State.store.skippedUpdate !== newVersion && isOutdated(oldVersion, newVersion)) {
|
|
openNewUpdateWindow();
|
|
}
|
|
} catch (e) {
|
|
console.error("AppUpdater: Failed to check for updates\n", e);
|
|
}
|
|
}
|
|
|
|
function openNewUpdateWindow() {
|
|
const win = new BrowserWindow({
|
|
width: 500,
|
|
autoHideMenuBar: true,
|
|
alwaysOnTop: true,
|
|
webPreferences: {
|
|
preload: join(__dirname, "updaterPreload.js"),
|
|
nodeIntegration: false,
|
|
contextIsolation: true,
|
|
sandbox: true
|
|
},
|
|
icon: ICON_PATH
|
|
});
|
|
|
|
makeLinksOpenExternally(win);
|
|
|
|
win.loadFile(join(VIEW_DIR, "updater.html"));
|
|
} |