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
|
||||
downloadSize := latestVersion.FileSize
|
||||
downloadHash := latestVersion.FileHash
|
||||
// 确定下载地址
|
||||
var downloadURL string
|
||||
var downloadSize int64
|
||||
var downloadHash string
|
||||
var fullPackageURL string
|
||||
var fullPackageSize int64
|
||||
var fullPackageHash string
|
||||
var isPatchUpdate bool
|
||||
|
||||
// 使用完整包地址(如果有)
|
||||
if latestVersion.UpdateType == "patch" && latestVersion.BaseVersionID != nil {
|
||||
// 最新版本是补丁类型
|
||||
// 检查客户端版本是否是基础版本
|
||||
if clientVersionRecord.ID == *latestVersion.BaseVersionID {
|
||||
// 客户端是基础版本,可以下载补丁包
|
||||
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 != "" {
|
||||
downloadURL = latestVersion.CustomDownloadURL
|
||||
}
|
||||
@@ -249,22 +288,19 @@ func handleAppCheckUpdate(c *gin.Context) {
|
||||
"files": files,
|
||||
}
|
||||
|
||||
// 检查是否有适合客户端版本的增量更新
|
||||
// 查找以客户端版本为基础版本的 patch 更新
|
||||
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 {
|
||||
// 找到了增量更新
|
||||
// 如果是补丁更新,添加补丁信息
|
||||
if isPatchUpdate {
|
||||
result["is_patch"] = true
|
||||
result["base_version"] = clientVersion
|
||||
result["patch_url"] = patchVersion.FilePath
|
||||
result["patch_size"] = patchVersion.FileSize
|
||||
result["patch_hash"] = patchVersion.FileHash
|
||||
result["patch_url"] = downloadURL
|
||||
result["patch_size"] = downloadSize
|
||||
result["patch_hash"] = downloadHash
|
||||
}
|
||||
|
||||
// 如果有完整包,添加完整包信息作为备选
|
||||
if fullPackageURL != "" {
|
||||
result["full_package_url"] = fullPackageURL
|
||||
result["full_package_size"] = fullPackageSize
|
||||
result["full_package_hash"] = fullPackageHash
|
||||
}
|
||||
|
||||
response.Success(c, result)
|
||||
|
||||
Reference in New Issue
Block a user