From 6b04aaf74d808cdcebd72f38ae915894ed88e3a6 Mon Sep 17 00:00:00 2001 From: comp500 Date: Wed, 25 Mar 2020 20:42:01 +0000 Subject: [PATCH] Hopefully handle snapshots (or at least 20w12a) correctly --- curseforge/curseforge.go | 10 +++++++++- curseforge/install.go | 28 ++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/curseforge/curseforge.go b/curseforge/curseforge.go index 82e0dfe..8ea74f3 100644 --- a/curseforge/curseforge.go +++ b/curseforge/curseforge.go @@ -28,6 +28,14 @@ var fileIDRegexes = [...]*regexp.Regexp{ regexp.MustCompile("^https?://(?:www\\.)?curseforge\\.com/minecraft/mc-mods/(.+)/download/(\\d+)"), } +// TODO: fix this later +func fixThisLater(mcVersion string) string { + if mcVersion == "20w12a" { + return "1.16-Snapshot" + } + return mcVersion +} + func getFileIDsFromString(mod string) (bool, int, int, error) { for _, v := range fileIDRegexes { matches := v.FindStringSubmatch(mod) @@ -196,7 +204,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string) ([]core.Update // TODO: change to timestamp-based comparison?? // TODO: manage alpha/beta/release correctly, check update channel? // Choose "newest" version by largest ID - if file.GameVersion == mcVersion && file.ID > fileID { + if file.GameVersion == fixThisLater(mcVersion) && file.ID > fileID { updateAvailable = true fileID = file.ID fileName = file.Name diff --git a/curseforge/install.go b/curseforge/install.go index b4027c6..783d724 100644 --- a/curseforge/install.go +++ b/curseforge/install.go @@ -268,7 +268,7 @@ func (r modResultsList) Len() int { func searchCurseforgeInternal(args []string, mcVersion string) (bool, modInfo) { fmt.Println("Searching CurseForge...") searchTerm := strings.Join(args, " ") - results, err := getSearch(searchTerm, mcVersion) + results, err := getSearch(searchTerm, fixThisLater(mcVersion)) if err != nil { fmt.Println(err) os.Exit(1) @@ -326,12 +326,36 @@ func searchCurseforgeInternal(args []string, mcVersion string) (bool, modInfo) { } } +func sliceContainsString(slice []string, elem string) bool { + for _, a := range slice { + if a == elem { + return true + } + } + return false +} + func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileInfo, error) { + // For snapshots, curseforge doesn't put them in GameVersionLatestFiles + if fileID == 0 { + var fileInfoData modFileInfo + for _, v := range modInfoData.LatestFiles { + // Choose "newest" version by largest ID + if sliceContainsString(v.GameVersions, fixThisLater(mcVersion)) && v.ID > fileID { + fileID = v.ID + fileInfoData = v + } + } + if fileID != 0 { + return fileInfoData, nil + } + } + if fileID == 0 { // TODO: change to timestamp-based comparison?? for _, v := range modInfoData.GameVersionLatestFiles { // Choose "newest" version by largest ID - if v.GameVersion == mcVersion && v.ID > fileID { + if v.GameVersion == fixThisLater(mcVersion) && v.ID > fileID { fileID = v.ID } }