76 lines
1.4 KiB
Go
76 lines
1.4 KiB
Go
package firstrechargereward
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
const firstRechargeRewardMinAppVersion = "1.5.0"
|
|
|
|
func isFirstRechargeRewardAppVersionSupported(appVersion string) bool {
|
|
appVersion = strings.TrimSpace(appVersion)
|
|
if appVersion == "" {
|
|
return false
|
|
}
|
|
return compareAppVersion(appVersion, firstRechargeRewardMinAppVersion) >= 0
|
|
}
|
|
|
|
func compareAppVersion(left, right string) int {
|
|
leftParts := parseAppVersion(left)
|
|
rightParts := parseAppVersion(right)
|
|
maxLen := len(leftParts)
|
|
if len(rightParts) > maxLen {
|
|
maxLen = len(rightParts)
|
|
}
|
|
for i := 0; i < maxLen; i++ {
|
|
var lv, rv int
|
|
if i < len(leftParts) {
|
|
lv = leftParts[i]
|
|
}
|
|
if i < len(rightParts) {
|
|
rv = rightParts[i]
|
|
}
|
|
if lv > rv {
|
|
return 1
|
|
}
|
|
if lv < rv {
|
|
return -1
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func parseAppVersion(version string) []int {
|
|
version = strings.TrimSpace(version)
|
|
if version == "" {
|
|
return []int{0}
|
|
}
|
|
parts := strings.Split(version, ".")
|
|
result := make([]int, 0, len(parts))
|
|
for _, part := range parts {
|
|
part = strings.TrimSpace(part)
|
|
if part == "" {
|
|
result = append(result, 0)
|
|
continue
|
|
}
|
|
digits := strings.Builder{}
|
|
for _, r := range part {
|
|
if r < '0' || r > '9' {
|
|
break
|
|
}
|
|
digits.WriteRune(r)
|
|
}
|
|
if digits.Len() == 0 {
|
|
result = append(result, 0)
|
|
continue
|
|
}
|
|
value, err := strconv.Atoi(digits.String())
|
|
if err != nil {
|
|
result = append(result, 0)
|
|
continue
|
|
}
|
|
result = append(result, value)
|
|
}
|
|
return result
|
|
}
|