Upload files to 'src/updater'
parent
3aa3d40451
commit
21906a305f
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
* 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"));
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* 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!
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { contextBridge } from "electron";
|
||||||
|
import { invoke } from "preload/typedIpc";
|
||||||
|
import { IpcEvents } from "shared/IpcEvents";
|
||||||
|
|
||||||
|
import type { UpdateData } from "./main";
|
||||||
|
|
||||||
|
contextBridge.exposeInMainWorld("Updater", {
|
||||||
|
getData: () => invoke<UpdateData>(IpcEvents.UPDATER_GET_DATA),
|
||||||
|
download: () => {
|
||||||
|
invoke<void>(IpcEvents.UPDATER_DOWNLOAD);
|
||||||
|
invoke<void>(IpcEvents.CLOSE);
|
||||||
|
},
|
||||||
|
ignore: () => invoke<void>(IpcEvents.UPDATE_IGNORE),
|
||||||
|
close: () => invoke<void>(IpcEvents.CLOSE)
|
||||||
|
});
|
Loading…
Reference in New Issue