mirror of
https://github.com/LCE-Hub/LCE-Emerald-Launcher.git
synced 2026-06-18 23:51:58 +00:00
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { useState, useEffect, useCallback } from "react";
|
|
import pkg from "../../package.json";
|
|
|
|
const CURRENT_VERSION = pkg.version;
|
|
const REPO_URL = "https://api.github.com/repos/LCE-Hub/LCE-Emerald-Launcher/releases/latest";
|
|
|
|
function isNewerVersion(latest: string, current: string): boolean {
|
|
const latestParts = latest.split('.').map(Number);
|
|
const currentParts = current.split('.').map(Number);
|
|
|
|
for (let i = 0; i < Math.max(latestParts.length, currentParts.length); i++) {
|
|
const latestPart = latestParts[i] || 0;
|
|
const currentPart = currentParts[i] || 0;
|
|
|
|
if (latestPart > currentPart) return true;
|
|
if (latestPart < currentPart) return false;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
export function useUpdateCheck() {
|
|
const [updateMessage, setUpdateMessage] = useState<string | null>(null);
|
|
|
|
const checkUpdates = useCallback(async () => {
|
|
try {
|
|
const response = await fetch(REPO_URL);
|
|
if (!response.ok) return;
|
|
|
|
const data = await response.json();
|
|
const latestVersion = data.tag_name.replace(/^v/, '');
|
|
|
|
if (isNewerVersion(latestVersion, CURRENT_VERSION)) {
|
|
setUpdateMessage(`Version ${data.tag_name} is now available!`);
|
|
}
|
|
} catch (e) {
|
|
console.error("Failed to check for updates:", e);
|
|
}
|
|
}, []);
|
|
|
|
useEffect(() => {
|
|
checkUpdates();
|
|
}, [checkUpdates]);
|
|
|
|
return {
|
|
updateMessage,
|
|
clearUpdateMessage: () => setUpdateMessage(null),
|
|
};
|
|
}
|