fix: 修复检测更新 API 正确处理补丁包
- 当最新版本是补丁类型且客户端版本是基础版本时,返回补丁包地址 - 当最新版本是补丁类型但客户端不是基础版本时,返回完整包地址 - 添加 full_package_url/full_package_size/full_package_hash 字段作为备选 - 移除冗余的补丁查询逻辑 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -216,18 +216,57 @@ func handleAppCheckUpdate(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 确定下载地址:优先使用完整包地址,其次自定义地址
|
// 确定下载地址
|
||||||
downloadURL := latestVersion.FilePath
|
var downloadURL string
|
||||||
downloadSize := latestVersion.FileSize
|
var downloadSize int64
|
||||||
downloadHash := latestVersion.FileHash
|
var downloadHash string
|
||||||
|
var fullPackageURL string
|
||||||
|
var fullPackageSize int64
|
||||||
|
var fullPackageHash string
|
||||||
|
var isPatchUpdate bool
|
||||||
|
|
||||||
// 使用完整包地址(如果有)
|
if latestVersion.UpdateType == "patch" && latestVersion.BaseVersionID != nil {
|
||||||
if latestVersion.FullPackagePath != "" {
|
// 最新版本是补丁类型
|
||||||
downloadURL = latestVersion.FullPackagePath
|
// 检查客户端版本是否是基础版本
|
||||||
downloadSize = latestVersion.FullPackageSize
|
if clientVersionRecord.ID == *latestVersion.BaseVersionID {
|
||||||
downloadHash = latestVersion.FullPackageHash
|
// 客户端是基础版本,可以下载补丁包
|
||||||
|
downloadURL = latestVersion.FilePath
|
||||||
|
downloadSize = latestVersion.FileSize
|
||||||
|
downloadHash = latestVersion.FileHash
|
||||||
|
isPatchUpdate = true
|
||||||
|
} else {
|
||||||
|
// 客户端不是基础版本,需要下载完整包
|
||||||
|
if latestVersion.FullPackagePath != "" {
|
||||||
|
downloadURL = latestVersion.FullPackagePath
|
||||||
|
downloadSize = latestVersion.FullPackageSize
|
||||||
|
downloadHash = latestVersion.FullPackageHash
|
||||||
|
} else {
|
||||||
|
// 没有完整包,使用补丁包(可能合并失败)
|
||||||
|
downloadURL = latestVersion.FilePath
|
||||||
|
downloadSize = latestVersion.FileSize
|
||||||
|
downloadHash = latestVersion.FileHash
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 保存完整包地址作为备选
|
||||||
|
if latestVersion.FullPackagePath != "" {
|
||||||
|
fullPackageURL = latestVersion.FullPackagePath
|
||||||
|
fullPackageSize = latestVersion.FullPackageSize
|
||||||
|
fullPackageHash = latestVersion.FullPackageHash
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 全量版本,直接使用文件路径
|
||||||
|
downloadURL = latestVersion.FilePath
|
||||||
|
downloadSize = latestVersion.FileSize
|
||||||
|
downloadHash = latestVersion.FileHash
|
||||||
|
// 全量版本的完整包就是自己
|
||||||
|
if latestVersion.FullPackagePath != "" {
|
||||||
|
fullPackageURL = latestVersion.FullPackagePath
|
||||||
|
fullPackageSize = latestVersion.FullPackageSize
|
||||||
|
fullPackageHash = latestVersion.FullPackageHash
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// 自定义地址优先级最高
|
|
||||||
|
// 自定义地址优先级最高(覆盖下载地址)
|
||||||
if latestVersion.CustomDownloadURL != "" {
|
if latestVersion.CustomDownloadURL != "" {
|
||||||
downloadURL = latestVersion.CustomDownloadURL
|
downloadURL = latestVersion.CustomDownloadURL
|
||||||
}
|
}
|
||||||
@@ -249,22 +288,19 @@ func handleAppCheckUpdate(c *gin.Context) {
|
|||||||
"files": files,
|
"files": files,
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否有适合客户端版本的增量更新
|
// 如果是补丁更新,添加补丁信息
|
||||||
// 查找以客户端版本为基础版本的 patch 更新
|
if isPatchUpdate {
|
||||||
var patchVersion model.Version
|
|
||||||
err := database.DB.Where("application_id = ? AND update_type = ? AND base_version_id = ? AND publish_status = ?",
|
|
||||||
app.ID, "patch", clientVersionRecord.ID, "published").
|
|
||||||
Order("id DESC").
|
|
||||||
Preload("Files").
|
|
||||||
First(&patchVersion).Error
|
|
||||||
|
|
||||||
if err == nil {
|
|
||||||
// 找到了增量更新
|
|
||||||
result["is_patch"] = true
|
result["is_patch"] = true
|
||||||
result["base_version"] = clientVersion
|
result["patch_url"] = downloadURL
|
||||||
result["patch_url"] = patchVersion.FilePath
|
result["patch_size"] = downloadSize
|
||||||
result["patch_size"] = patchVersion.FileSize
|
result["patch_hash"] = downloadHash
|
||||||
result["patch_hash"] = patchVersion.FileHash
|
}
|
||||||
|
|
||||||
|
// 如果有完整包,添加完整包信息作为备选
|
||||||
|
if fullPackageURL != "" {
|
||||||
|
result["full_package_url"] = fullPackageURL
|
||||||
|
result["full_package_size"] = fullPackageSize
|
||||||
|
result["full_package_hash"] = fullPackageHash
|
||||||
}
|
}
|
||||||
|
|
||||||
response.Success(c, result)
|
response.Success(c, result)
|
||||||
|
|||||||
Reference in New Issue
Block a user