diff --git a/Go_Updater/api/client.go b/Go_Updater/api/client.go index f50ac7f..ef28e82 100644 --- a/Go_Updater/api/client.go +++ b/Go_Updater/api/client.go @@ -137,6 +137,11 @@ func (c *Client) IsUpdateAvailable(response *MirrorResponse, currentVersion stri currentVersionNormalized := c.normalizeVersionForComparison(currentVersion) latestVersionNormalized := c.normalizeVersionForComparison(latestVersion) + // 调试输出 + // fmt.Printf("Current: %s -> %s\n", currentVersion, currentVersionNormalized) + // fmt.Printf("Latest: %s -> %s\n", latestVersion, latestVersionNormalized) + // fmt.Printf("Compare result: %d\n", compareVersions(currentVersionNormalized, latestVersionNormalized)) + // 使用语义版本比较 return compareVersions(currentVersionNormalized, latestVersionNormalized) < 0 } @@ -204,28 +209,40 @@ func normalizeVersion(version string) string { return version } -// parseVersionParts 将版本字符串解析为数字组件 +// parseVersionParts 将版本字符串解析为数字组件,包括beta版本号 func parseVersionParts(version string) []int { if version == "" { return []int{0} } - parts := make([]int, 0, 3) + parts := make([]int, 0, 4) current := 0 - for _, char := range version { + // 先检查是否包含 -beta + betaIndex := strings.Index(version, "-beta") + var mainVersion, betaVersion string + + if betaIndex != -1 { + mainVersion = version[:betaIndex] + betaVersion = version[betaIndex+5:] // 跳过 "-beta" + } else { + mainVersion = version + betaVersion = "" + } + + // 解析主版本号 (major.minor.patch) + for _, char := range mainVersion { if char >= '0' && char <= '9' { current = current*10 + int(char-'0') } else if char == '.' { parts = append(parts, current) current = 0 } else { - // 在非数字、非点字符处停止解析(如预发布标识符) + // 遇到非数字非点字符,停止解析 break } } - - // 添加最后一个组件 + // 添加最后一个主版本组件 parts = append(parts, current) // 确保至少有 3 个组件 (major.minor.patch) @@ -233,6 +250,27 @@ func parseVersionParts(version string) []int { parts = append(parts, 0) } + // 解析beta版本号 + if betaVersion != "" { + // 跳过可能的点号 + if strings.HasPrefix(betaVersion, ".") { + betaVersion = betaVersion[1:] + } + + betaNum := 0 + for _, char := range betaVersion { + if char >= '0' && char <= '9' { + betaNum = betaNum*10 + int(char-'0') + } else { + break + } + } + parts = append(parts, betaNum) + } else { + // 非beta版本,添加0作为beta版本号 + parts = append(parts, 0) + } + return parts } diff --git a/Go_Updater/api/client_test.go b/Go_Updater/api/client_test.go index 018bfca..bdb9f72 100644 --- a/Go_Updater/api/client_test.go +++ b/Go_Updater/api/client_test.go @@ -153,6 +153,26 @@ func TestIsUpdateAvailable(t *testing.T) { currentVersion: "4.4.0.0", expected: false, }, + { + name: "beta版本有更新", + response: &MirrorResponse{ + Code: 0, + Data: struct { + VersionName string `json:"version_name"` + VersionNumber int `json:"version_number"` + URL string `json:"url,omitempty"` + SHA256 string `json:"sha256,omitempty"` + Channel string `json:"channel"` + OS string `json:"os"` + Arch string `json:"arch"` + UpdateType string `json:"update_type,omitempty"` + ReleaseNote string `json:"release_note"` + FileSize int64 `json:"filesize,omitempty"` + }{VersionName: "v4.4.1-beta.4"}, + }, + currentVersion: "4.4.1.3", + expected: true, + }, } for _, test := range tests { diff --git a/Go_Updater/main.go b/Go_Updater/main.go index 6ca6429..45459d6 100644 --- a/Go_Updater/main.go +++ b/Go_Updater/main.go @@ -563,7 +563,7 @@ func (app *Application) executeCheckingState() (UpdateState, error) { default: fmt.Printf("检查更新类别:%v\n", updateChannel) } - fmt.Printf("当前版本:%v", currentVer) + fmt.Printf("当前版本:%v\n", currentVer) app.logger.Info("当前更新类别:" + updateChannel + ";当前版本:" + currentVer) if err != nil { app.logger.Error("检查更新失败: %v", err)