Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+190
View File
@@ -0,0 +1,190 @@
package versionser
import (
"91porn-server/common"
"91porn-server/common/crypt"
"91porn-server/common/version"
"91porn-server/models/v/versionmod"
)
func HandleVersionForList(ver, sysType string) (verlist []*versionmod.VersionBody) {
v1, err := version.New(ver)
if v1 == nil || err != nil {
return
}
sys := common.HandleSysType(sysType)
//首次查看当前版本有没有开启 提升,如果有指定的版本,则返回指定的版本,如果没有指定版本,则返回该平台最新的版本,如果没有打开则按照正常流程走
vermod, err := versionmod.FindOneVersionByPlatVer(sys, ver)
if vermod != nil && err == nil {
if vermod.IsUpgrade {
if vermod.SpecVersion != "" {
newVersion, _ := versionmod.FindOneVersionByPlatVer(sys, vermod.SpecVersion)
if newVersion != nil {
verlist = append(verlist, &versionmod.VersionBody{
Code: newVersion.Code,
VersionName: newVersion.VersionName,
Platform: newVersion.Platform,
Description: newVersion.Description,
ForcedUpdate: true,
URL: newVersion.URL})
return
} else {
return
}
} else {
newVer, _ := versionmod.FindVersion(sys)
verlist = append(verlist, &versionmod.VersionBody{
Code: newVer.Code,
VersionName: newVer.VersionName,
Platform: newVer.Platform,
Description: newVer.Description,
ForcedUpdate: true,
URL: newVer.URL})
return
}
}
}
newVer, err := versionmod.FindVersion(sys)
if newVer.VersionName == "" || err != nil {
return
}
v2, _ := version.New(newVer.VersionName)
if v1.GTE(v2) {
return
}
if newVer.VersionRange.Major != "" {
major, _ := version.New(newVer.VersionRange.Major)
if v1.GT(major) {
return
}
}
if newVer.VersionRange.Minor != "" {
minor, _ := version.New(newVer.VersionRange.Minor)
if v1.LT(minor) {
return
}
}
verlist = append(verlist, &versionmod.VersionBody{
Code: newVer.Code,
VersionName: newVer.VersionName,
Platform: newVer.Platform,
Description: newVer.Description,
ForcedUpdate: newVer.ForcedUpdate,
URL: newVer.URL})
return
}
// 当前版本是否在更新范围
func HandleVersion(ver string, vermod *versionmod.Version) bool {
v1, err := version.New(ver)
if v1 == nil || err != nil {
return false
}
if vermod != nil {
if vermod.VersionRange.Major == "" && vermod.VersionRange.Minor == "" {
return true
}
if vermod.VersionRange.Major != "" {
major, _ := version.New(vermod.VersionRange.Major)
if v1.GT(major) {
return false
}
}
if vermod.VersionRange.Minor != "" {
minor, _ := version.New(vermod.VersionRange.Minor)
if v1.LT(minor) {
return false
}
}
return true
}
return false
}
func CheckVersionBaseOnBuildId(ver, sysType, buildId string) (versionBody []*versionmod.VersionBody) {
v1, err := version.New(ver)
if v1 == nil || err != nil {
return
}
sys := common.HandleSysType(sysType)
//查看当前版本有没有开启 提升,如果有指定的版本,则返回指定的版本,如果没有指定版本,则返回该平台最新的版本,如果没有打开则按照正常流程走
vermod, err := versionmod.FindOneVersionByPlatVerBuild(sys, ver, buildId)
if vermod != nil && err == nil {
if vermod.IsUpgrade {
if vermod.SpecVersion != "" {
newVersion, _ := versionmod.FindOneVersionByPlatVerBuild(sys, vermod.SpecVersion, buildId)
if newVersion != nil {
versionBody = append(versionBody, &versionmod.VersionBody{
Code: newVersion.Code,
VersionName: newVersion.VersionName,
Platform: newVersion.Platform,
Description: newVersion.Description,
ForcedUpdate: true,
URL: newVersion.URL})
return
} else {
return
}
}
}
}
//分为带buildId的包 和不带buildId的包
ver1, err := versionmod.FindVersionBaseOnBuildIdAndPlatForm(buildId, sys)
if ver1 == nil || err != nil {
return
}
if ver1.Origin == versionmod.TF {
ver2, err := versionmod.FindVersionBaseOnBuildId(buildId)
if ver2 == nil || err != nil {
return
}
v2, _ := version.New(ver2.VersionName)
if v1.GTE(v2) {
return
}
versionBody = append(versionBody, &versionmod.VersionBody{
Code: ver2.Code,
VersionName: ver2.VersionName,
Platform: ver2.Platform,
Description: ver2.Description,
ForcedUpdate: ver2.ForcedUpdate,
URL: GetTFUrl(ver2.URL)})
} else {
versionBody = append(versionBody, &versionmod.VersionBody{
Code: ver1.Code,
VersionName: ver1.VersionName,
Platform: ver1.Platform,
Description: ver1.Description,
ForcedUpdate: ver1.ForcedUpdate,
URL: ver1.URL})
}
return
}
func GetTFUrl(tf string) string {
if tf != "" {
type tfStc struct {
Url string `json:"url"`
Name string `json:"name"`
}
var tfArr []tfStc
_ = crypt.JSON2Struct(tf, &tfArr)
tfArrLen := len(tfArr)
if tfArrLen == 0 {
return tf
}
weight := 100 / tfArrLen
chioce := make([]common.Choice, tfArrLen)
for i := 0; i < len(tfArr); i++ {
chioce[i] = common.Choice{
Weight: weight,
Item: tfArr[i].Url,
}
}
ch, _ := common.WeightedChoice(chioce)
if v, ok := ch.Item.(string); ok {
return v
}
}
return tf
}