mirror of
https://github.com/Gabi-Zar/Silk-Fly-Launcher.git
synced 2026-04-17 05:26:04 +02:00
Add GitHub update check
This commit is contained in:
49
main.js
49
main.js
@@ -11,6 +11,7 @@ import { path7za } from "7zip-bin";
|
|||||||
import node7z from "node-7z";
|
import node7z from "node-7z";
|
||||||
const { extractFull } = node7z;
|
const { extractFull } = node7z;
|
||||||
import packageJson from "./package.json" with { type: "json" };
|
import packageJson from "./package.json" with { type: "json" };
|
||||||
|
import semverGt from "semver/functions/gt.js";
|
||||||
|
|
||||||
const __filename = fileURLToPath(import.meta.url);
|
const __filename = fileURLToPath(import.meta.url);
|
||||||
const __dirname = path.dirname(__filename);
|
const __dirname = path.dirname(__filename);
|
||||||
@@ -79,6 +80,9 @@ async function createWindow() {
|
|||||||
|
|
||||||
mainWindow.once("ready-to-show", () => {
|
mainWindow.once("ready-to-show", () => {
|
||||||
mainWindow.show();
|
mainWindow.show();
|
||||||
|
if (!isDev) {
|
||||||
|
verifyUpdate();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +119,51 @@ app.on("open-url", (event, url) => {
|
|||||||
handleNxmUrl(url);
|
handleNxmUrl(url);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
async function verifyUpdate() {
|
||||||
|
const GITHUB_URL = "https://api.github.com/repos/Gabi-Zar/Silk-Fly-Launcher/releases";
|
||||||
|
|
||||||
|
const res = await fetch(GITHUB_URL, {
|
||||||
|
headers: {
|
||||||
|
"User-Agent": userAgent,
|
||||||
|
Accept: "application/vnd.github+json",
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!res.ok) {
|
||||||
|
if (res.status == 403) {
|
||||||
|
mainWindow.webContents.send("showToast", "Github has blocked the application. Please try again later.", "error");
|
||||||
|
}
|
||||||
|
throw new Error(`GitHub API error: ${res.status}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const releases = await res.json();
|
||||||
|
const prerelease = releases.find((r) => r.prerelease);
|
||||||
|
const release = releases.find((r) => !r.prerelease && !r.draft);
|
||||||
|
|
||||||
|
let prereleaseVersion;
|
||||||
|
let releaseVersion;
|
||||||
|
let latestVersion;
|
||||||
|
|
||||||
|
if (prerelease) {
|
||||||
|
prereleaseVersion = prerelease.tag_name.replace(/^v/, "");
|
||||||
|
latestVersion = prereleaseVersion;
|
||||||
|
}
|
||||||
|
if (release) {
|
||||||
|
releaseVersion = release.tag_name.replace(/^v/, "");
|
||||||
|
latestVersion = releaseVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prereleaseVersion && releaseVersion) {
|
||||||
|
latestVersion = semverGt(prereleaseVersion, releaseVersion) ? prereleaseVersion : releaseVersion;
|
||||||
|
}
|
||||||
|
if (latestVersion != VERSION) {
|
||||||
|
mainWindow.webContents.send(
|
||||||
|
"showBanner",
|
||||||
|
`Update v${latestVersion} is available on <a href="" class="link" onclick="electronAPI.openExternalLink('https://github.com/Gabi-Zar/Silk-Fly-Launcher/releases/tag/v${latestVersion}')">GitHub</a>! Your current version is ${VERSION}.`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////
|
||||||
///////////////// SAVING AND LOADING /////////////////
|
///////////////// SAVING AND LOADING /////////////////
|
||||||
ipcMain.handle("save-path", (event, path) => {
|
ipcMain.handle("save-path", (event, path) => {
|
||||||
|
|||||||
7
package-lock.json
generated
7
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "silkflylauncher",
|
"name": "silkflylauncher",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0-dev",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "silkflylauncher",
|
"name": "silkflylauncher",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0-dev",
|
||||||
"license": "GPL-3.0",
|
"license": "GPL-3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@nexusmods/nexus-api": "^1.1.5",
|
"@nexusmods/nexus-api": "^1.1.5",
|
||||||
@@ -14,7 +14,8 @@
|
|||||||
"electron-store": "^11.0.2",
|
"electron-store": "^11.0.2",
|
||||||
"graphql": "^16.12.0",
|
"graphql": "^16.12.0",
|
||||||
"graphql-request": "^7.4.0",
|
"graphql-request": "^7.4.0",
|
||||||
"node-7z": "^3.0.0"
|
"node-7z": "^3.0.0",
|
||||||
|
"semver": "^7.7.4"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@electron-forge/cli": "^7.11.1",
|
"@electron-forge/cli": "^7.11.1",
|
||||||
|
|||||||
@@ -30,7 +30,8 @@
|
|||||||
"electron-store": "^11.0.2",
|
"electron-store": "^11.0.2",
|
||||||
"graphql": "^16.12.0",
|
"graphql": "^16.12.0",
|
||||||
"graphql-request": "^7.4.0",
|
"graphql-request": "^7.4.0",
|
||||||
"node-7z": "^3.0.0"
|
"node-7z": "^3.0.0",
|
||||||
|
"semver": "^7.7.4"
|
||||||
},
|
},
|
||||||
"AES-key-nexus-api": "__AES_KEY__"
|
"AES-key-nexus-api": "__AES_KEY__"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,11 @@ contextBridge.exposeInMainWorld("electronAPI", {
|
|||||||
callback(message, type, duration);
|
callback(message, type, duration);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
onShowBanner: (callback) => {
|
||||||
|
ipcRenderer.on("showBanner", (event, message) => {
|
||||||
|
callback(message);
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
contextBridge.exposeInMainWorld("bepinex", {
|
contextBridge.exposeInMainWorld("bepinex", {
|
||||||
|
|||||||
@@ -58,6 +58,10 @@
|
|||||||
|
|
||||||
<!-- Main content -->
|
<!-- Main content -->
|
||||||
<main class="content">
|
<main class="content">
|
||||||
|
<div class="banner-div" id="banner-div">
|
||||||
|
<p id="banner-text"></p>
|
||||||
|
<button class="default-button square-button" onclick="hideBanner()">X</button>
|
||||||
|
</div>
|
||||||
<h1 id="title">Silk Fly Launcher</h1>
|
<h1 id="title">Silk Fly Launcher</h1>
|
||||||
<div class="view" id="view"></div>
|
<div class="view" id="view"></div>
|
||||||
<div class="toast-div" id="toast-div"></div>
|
<div class="toast-div" id="toast-div"></div>
|
||||||
|
|||||||
@@ -739,6 +739,23 @@ function showToast(message, type = "info", duration = 3000) {
|
|||||||
|
|
||||||
electronAPI.onShowToast(showToast);
|
electronAPI.onShowToast(showToast);
|
||||||
|
|
||||||
|
function showBanner(message) {
|
||||||
|
const bannerDiv = document.getElementById("banner-div");
|
||||||
|
const bannerText = document.getElementById("banner-text");
|
||||||
|
|
||||||
|
console.log(bannerDiv);
|
||||||
|
|
||||||
|
bannerText.innerHTML = message;
|
||||||
|
bannerDiv.classList.add("show");
|
||||||
|
}
|
||||||
|
|
||||||
|
electronAPI.onShowBanner(showBanner);
|
||||||
|
|
||||||
|
function hideBanner() {
|
||||||
|
const bannerDiv = document.getElementById("banner-div");
|
||||||
|
bannerDiv.classList.remove("show");
|
||||||
|
}
|
||||||
|
|
||||||
function changeModsPage(offsetChange) {
|
function changeModsPage(offsetChange) {
|
||||||
if (oldPage == "mods-installed") {
|
if (oldPage == "mods-installed") {
|
||||||
if (offsetChange == "min") {
|
if (offsetChange == "min") {
|
||||||
|
|||||||
@@ -447,3 +447,19 @@ body {
|
|||||||
.long-text {
|
.long-text {
|
||||||
overflow-wrap: anywhere;
|
overflow-wrap: anywhere;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.banner-div {
|
||||||
|
display: none;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
border: 1px solid var(--secondary-color);
|
||||||
|
background: var(--primary-color);
|
||||||
|
margin-bottom: 20px;
|
||||||
|
height: 64px;
|
||||||
|
border-radius: 12px;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.banner-div.show {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user