🐛 完善版本更新检测逻辑

This commit is contained in:
BTMuli
2026-04-29 22:21:05 +08:00
parent 779689e6e4
commit ed256ae3ab
2 changed files with 33 additions and 2 deletions

View File

@@ -84,6 +84,7 @@ import { invoke } from "@tauri-apps/api/core";
import { openUrl } from "@tauri-apps/plugin-opener";
import getLrv from "@utils/Github.js";
import TGLogger from "@utils/TGLogger.js";
import { compareVersions } from "@utils/toolFunc.js";
import { storeToRefs } from "pinia";
import { defineComponent, onMounted, ref, shallowRef, watch } from "vue";
@@ -221,11 +222,17 @@ async function checkAppUpdate(): Promise<void> {
const versionApp = await getVersion();
const versionCheck = await getLrv();
if (versionCheck === "0") return;
if (versionCheck === versionApp) {
const versionCompare = compareVersions(versionApp, versionCheck);
if (versionCompare === 0) {
await TGLogger.Info(`[Home][CheckAppUpdate]版本号一致:${versionCheck}`);
lastUcts.value = nowTs;
return;
}
if (versionCompare > 0) {
await TGLogger.Info(`[Home][CheckAppUpdate]当前版本${versionApp}比远程版本${versionCheck}更新`);
lastUcts.value = nowTs;
return;
}
await TGLogger.Info(`[Home][CheckAppUpdate]检测到新版本:${versionCheck}`);
const check = await showDialog.checkF({
title: "检测到新版本",

View File

@@ -1,6 +1,6 @@
/**
* 一些工具函数
* @since Beta v0.9.5
* @since Beta v0.10.2
*/
import { tz } from "@date-fns/tz";
@@ -392,6 +392,30 @@ export function validEmail(email: string): boolean {
return emailRegex.test(email);
}
/**
* 比较两个语义化版本号
* @since Beta v0.10.2
* @param v1 - 版本号1当前应用版本
* @param v2 - 版本号2远程最新版本
* @returns 比较结果1表示v1更新-1表示v2更新0表示相同
* @example compareVersions("0.10.1", "0.10.0") // 返回 1
* @example compareVersions("0.9.9", "0.10.0") // 返回 -1
* @example compareVersions("0.10.0", "0.10.0") // 返回 0
*/
export function compareVersions(v1: string, v2: string): number {
const parts1 = v1.split(".").map(Number);
const parts2 = v2.split(".").map(Number);
const maxLength = Math.max(parts1.length, parts2.length);
for (let i = 0; i < maxLength; i++) {
const num1 = parts1[i] || 0;
const num2 = parts2[i] || 0;
if (num1 > num2) return 1;
if (num1 < num2) return -1;
}
return 0;
}
/**
* 传入时间字符串跟对应时区转成utc8时间字符串
* @since Beta v0.9.5