Fix support for all snapshot versions

This commit is contained in:
comp500 2020-04-13 21:35:34 +01:00
parent bcae40e531
commit c967575cd3
2 changed files with 79 additions and 7 deletions

View File

@ -4,6 +4,7 @@ import (
"errors" "errors"
"regexp" "regexp"
"strconv" "strconv"
"strings"
"github.com/comp500/packwiz/cmd" "github.com/comp500/packwiz/cmd"
"github.com/comp500/packwiz/core" "github.com/comp500/packwiz/core"
@ -28,10 +29,81 @@ var fileIDRegexes = [...]*regexp.Regexp{
regexp.MustCompile("^https?://(?:www\\.)?curseforge\\.com/minecraft/mc-mods/(.+)/download/(\\d+)"), regexp.MustCompile("^https?://(?:www\\.)?curseforge\\.com/minecraft/mc-mods/(.+)/download/(\\d+)"),
} }
// TODO: fix this later var snapshotVersionRegex = regexp.MustCompile("(?:Snapshot )?(\\d+)w0?(0|[1-9]\\d*)([a-z])")
func fixThisLater(mcVersion string) string {
if mcVersion == "20w15a" { func getCurseforgeVersion(mcVersion string) string {
if strings.HasSuffix(mcVersion, "-pre") {
return strings.TrimSuffix(mcVersion, "-pre") + "-Snapshot"
}
// Mojang why must it be this way
index := strings.Index(mcVersion, " Pre-Release ")
if index > -1 {
return mcVersion[:index] + "-Snapshot"
}
index = strings.Index(mcVersion, " Pre-release ")
if index > -1 {
return mcVersion[:index] + "-Snapshot"
}
matches := snapshotVersionRegex.FindStringSubmatch(mcVersion)
if matches == nil {
return mcVersion
}
year, err := strconv.Atoi(matches[1])
if err != nil {
return mcVersion
}
week, err := strconv.Atoi(matches[2])
if err != nil {
return mcVersion
}
if year == 20 && week >= 6 {
return "1.16-Snapshot" return "1.16-Snapshot"
} else if year == 19 && week >= 34 {
return "1.15-Snapshot"
} else if year == 18 && week >= 43 || year == 19 && week <= 14 {
return "1.14-Snapshot"
} else if year == 18 && week >= 30 && week <= 33 {
return "1.13.1-Snapshot"
} else if year == 17 && week >= 43 || year == 18 && week <= 22 {
return "1.13-Snapshot"
} else if year == 17 && week == 31 {
return "1.12.1-Snapshot"
} else if year == 17 && week >= 6 && week <= 18 {
return "1.12-Snapshot"
} else if year == 16 && week == 50 {
return "1.11.1-Snapshot"
} else if year == 16 && week >= 32 && week <= 44 {
return "1.11-Snapshot"
} else if year == 16 && week >= 20 && week <= 21 {
return "1.10-Snapshot"
} else if year == 16 && week >= 14 && week <= 15 {
return "1.9.3-Snapshot"
} else if year == 15 && week >= 31 || year == 16 && week <= 7 {
return "1.9-Snapshot"
} else if year == 14 && week >= 2 && week <= 34 {
return "1.8-Snapshot"
} else if year == 13 && week >= 47 && week <= 49 {
return "1.7.4-Snapshot"
} else if year == 13 && week >= 36 && week <= 43 {
return "1.7.2-Snapshot"
} else if year == 13 && week >= 16 && week <= 26 {
return "1.6-Snapshot"
} else if year == 13 && week >= 11 && week <= 12 {
return "1.5.1-Snapshot"
} else if year == 13 && week >= 1 && week <= 10 {
return "1.5-Snapshot"
} else if year == 12 && week >= 49 && week <= 50 {
return "1.4.6-Snapshot"
} else if year == 12 && week >= 32 && week <= 42 {
return "1.4.2-Snapshot"
} else if year == 12 && week >= 15 && week <= 30 {
return "1.3.1-Snapshot"
} else if year == 12 && week >= 3 && week <= 8 {
return "1.2.1-Snapshot"
} else if year == 11 && week >= 47 || year == 12 && week <= 1 {
return "1.1-Snapshot"
} }
return mcVersion return mcVersion
} }
@ -204,7 +276,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string) ([]core.Update
// TODO: change to timestamp-based comparison?? // TODO: change to timestamp-based comparison??
// TODO: manage alpha/beta/release correctly, check update channel? // TODO: manage alpha/beta/release correctly, check update channel?
// Choose "newest" version by largest ID // Choose "newest" version by largest ID
if file.GameVersion == fixThisLater(mcVersion) && file.ID > fileID { if file.GameVersion == getCurseforgeVersion(mcVersion) && file.ID > fileID {
updateAvailable = true updateAvailable = true
fileID = file.ID fileID = file.ID
fileName = file.Name fileName = file.Name

View File

@ -268,7 +268,7 @@ func (r modResultsList) Len() int {
func searchCurseforgeInternal(args []string, mcVersion string) (bool, modInfo) { func searchCurseforgeInternal(args []string, mcVersion string) (bool, modInfo) {
fmt.Println("Searching CurseForge...") fmt.Println("Searching CurseForge...")
searchTerm := strings.Join(args, " ") searchTerm := strings.Join(args, " ")
results, err := getSearch(searchTerm, fixThisLater(mcVersion)) results, err := getSearch(searchTerm, getCurseforgeVersion(mcVersion))
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)
@ -341,7 +341,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn
var fileInfoData modFileInfo var fileInfoData modFileInfo
for _, v := range modInfoData.LatestFiles { for _, v := range modInfoData.LatestFiles {
// Choose "newest" version by largest ID // Choose "newest" version by largest ID
if sliceContainsString(v.GameVersions, fixThisLater(mcVersion)) && v.ID > fileID { if sliceContainsString(v.GameVersions, getCurseforgeVersion(mcVersion)) && v.ID > fileID {
fileID = v.ID fileID = v.ID
fileInfoData = v fileInfoData = v
} }
@ -355,7 +355,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn
// TODO: change to timestamp-based comparison?? // TODO: change to timestamp-based comparison??
for _, v := range modInfoData.GameVersionLatestFiles { for _, v := range modInfoData.GameVersionLatestFiles {
// Choose "newest" version by largest ID // Choose "newest" version by largest ID
if v.GameVersion == fixThisLater(mcVersion) && v.ID > fileID { if v.GameVersion == getCurseforgeVersion(mcVersion) && v.ID > fileID {
fileID = v.ID fileID = v.ID
} }
} }