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