Files
seanime-docker/seanime-2.9.10/internal/util/version.go
2025-09-20 14:08:38 +01:00

79 lines
1.7 KiB
Go

package util
import (
"strconv"
"strings"
"github.com/Masterminds/semver/v3"
)
func IsValidVersion(version string) bool {
parts := strings.Split(version, ".")
if len(parts) != 3 {
return false
}
for _, part := range parts {
if _, err := strconv.Atoi(part); err != nil {
return false
}
}
return true
}
// CompareVersion compares two versions and returns the difference between them.
//
// 3: Current version is newer by major version.
// 2: Current version is newer by minor version.
// 1: Current version is newer by patch version.
// -3: Current version is older by major version.
// -2: Current version is older by minor version.
// -1: Current version is older by patch version.
func CompareVersion(current string, b string) (comp int, shouldUpdate bool) {
currV, err := semver.NewVersion(current)
if err != nil {
return 0, false
}
otherV, err := semver.NewVersion(b)
if err != nil {
return 0, false
}
comp = currV.Compare(otherV)
if comp == 0 {
return 0, false
}
if currV.GreaterThan(otherV) {
shouldUpdate = false
if currV.Major() > otherV.Major() {
comp *= 3
} else if currV.Minor() > otherV.Minor() {
comp *= 2
} else if currV.Patch() > otherV.Patch() {
comp *= 1
}
} else if currV.LessThan(otherV) {
shouldUpdate = true
if currV.Major() < otherV.Major() {
comp *= 3
} else if currV.Minor() < otherV.Minor() {
comp *= 2
} else if currV.Patch() < otherV.Patch() {
comp *= 1
}
}
return comp, shouldUpdate
}
func VersionIsOlderThan(version string, compare string) bool {
comp, shouldUpdate := CompareVersion(version, compare)
// shouldUpdate is false means the current version is newer
return comp < 0 && shouldUpdate
}