From e357700d606b6486a72200c7064f0f972722aedf Mon Sep 17 00:00:00 2001 From: Memory <134070804+Memory2314@users.noreply.github.com> Date: Thu, 21 Aug 2025 19:02:01 +0800 Subject: [PATCH] fix: correct version comparison logic --- src/main/resolve/autoUpdater.ts | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/resolve/autoUpdater.ts b/src/main/resolve/autoUpdater.ts index b1a1cb1..ec76880 100644 --- a/src/main/resolve/autoUpdater.ts +++ b/src/main/resolve/autoUpdater.ts @@ -26,13 +26,31 @@ export async function checkUpdate(): Promise { ) const latest = yaml.parse(res.data, { merge: true }) as IAppVersion const currentVersion = app.getVersion() - if (latest.version !== currentVersion) { + if (compareVersions(latest.version, currentVersion) > 0) { return latest } else { return undefined } } +// 1:新 -1:旧 0:相同 +function compareVersions(a: string, b: string): number { + const parsePart = (part: string) => { + const numPart = part.split('-')[0] + const num = parseInt(numPart, 10) + return isNaN(num) ? 0 : num + } + const v1 = a.replace(/^v/, '').split('.').map(parsePart) + const v2 = b.replace(/^v/, '').split('.').map(parsePart) + for (let i = 0; i < Math.max(v1.length, v2.length); i++) { + const num1 = v1[i] || 0 + const num2 = v2[i] || 0 + if (num1 > num2) return 1 + if (num1 < num2) return -1 + } + return 0 +} + export async function downloadAndInstallUpdate(version: string): Promise { const { 'mixed-port': mixedPort = 7890 } = await getControledMihomoConfig() const baseUrl = `https://github.com/mihomo-party-org/mihomo-party/releases/download/v${version}/` @@ -113,4 +131,4 @@ export async function downloadAndInstallUpdate(version: string): Promise { rm(path.join(dataDir(), file)) throw e } -} +} \ No newline at end of file