|
@@ -19,6 +19,7 @@ import (
|
|
|
|
|
|
|
|
"github.com/mhsanaei/3x-ui/v3/internal/config"
|
|
"github.com/mhsanaei/3x-ui/v3/internal/config"
|
|
|
"github.com/mhsanaei/3x-ui/v3/internal/logger"
|
|
"github.com/mhsanaei/3x-ui/v3/internal/logger"
|
|
|
|
|
+ "github.com/mhsanaei/3x-ui/v3/internal/util/version"
|
|
|
"github.com/mhsanaei/3x-ui/v3/internal/web/global"
|
|
"github.com/mhsanaei/3x-ui/v3/internal/web/global"
|
|
|
"github.com/mhsanaei/3x-ui/v3/internal/web/service"
|
|
"github.com/mhsanaei/3x-ui/v3/internal/web/service"
|
|
|
)
|
|
)
|
|
@@ -522,50 +523,13 @@ func resolveUpdateFolders() (string, string) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func isNewerVersion(latest string, current string) bool {
|
|
func isNewerVersion(latest string, current string) bool {
|
|
|
- cmp, ok := compareVersionStrings(latest, current)
|
|
|
|
|
|
|
+ cmp, ok := version.Compare(latest, current)
|
|
|
if !ok {
|
|
if !ok {
|
|
|
- return normalizeVersionTag(latest) != normalizeVersionTag(current)
|
|
|
|
|
|
|
+ return version.Normalize(latest) != version.Normalize(current)
|
|
|
}
|
|
}
|
|
|
return cmp > 0
|
|
return cmp > 0
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func compareVersionStrings(a string, b string) (int, bool) {
|
|
|
|
|
- aParts, okA := parseVersionParts(a)
|
|
|
|
|
- bParts, okB := parseVersionParts(b)
|
|
|
|
|
- if !okA || !okB {
|
|
|
|
|
- return 0, false
|
|
|
|
|
- }
|
|
|
|
|
- for i := range len(aParts) {
|
|
|
|
|
- if aParts[i] > bParts[i] {
|
|
|
|
|
- return 1, true
|
|
|
|
|
- }
|
|
|
|
|
- if aParts[i] < bParts[i] {
|
|
|
|
|
- return -1, true
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- return 0, true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func parseVersionParts(version string) ([3]int, bool) {
|
|
|
|
|
- var result [3]int
|
|
|
|
|
- parts := strings.Split(normalizeVersionTag(version), ".")
|
|
|
|
|
- if len(parts) != 3 {
|
|
|
|
|
- return result, false
|
|
|
|
|
- }
|
|
|
|
|
- for i, part := range parts {
|
|
|
|
|
- n, err := strconv.Atoi(part)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return result, false
|
|
|
|
|
- }
|
|
|
|
|
- result[i] = n
|
|
|
|
|
- }
|
|
|
|
|
- return result, true
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func normalizeVersionTag(version string) string {
|
|
|
|
|
- return strings.TrimPrefix(strings.TrimSpace(version), "v")
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
func shellQuote(value string) string {
|
|
func shellQuote(value string) string {
|
|
|
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
|
|
return "'" + strings.ReplaceAll(value, "'", "'\\''") + "'"
|
|
|
}
|
|
}
|