From 2ca4ad91f9e25580245fd014923cdcb71f8007fc Mon Sep 17 00:00:00 2001 From: comp500 Date: Wed, 11 Nov 2020 04:33:49 +0000 Subject: [PATCH] Improved file selection - check both latest and game version latest --- curseforge/curseforge.go | 1 + curseforge/install.go | 20 +++++++------------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/curseforge/curseforge.go b/curseforge/curseforge.go index 3fb520a..86a4cf0 100644 --- a/curseforge/curseforge.go +++ b/curseforge/curseforge.go @@ -288,6 +288,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string) ([]core.Update updateAvailable = true fileID = file.ID fileName = file.Name + fileInfoObtained = false // Make sure we get the file info again } } diff --git a/curseforge/install.go b/curseforge/install.go index a6f8f0d..65d1fed 100644 --- a/curseforge/install.go +++ b/curseforge/install.go @@ -339,39 +339,33 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn // For snapshots, curseforge doesn't put them in GameVersionLatestFiles if fileID == 0 { var fileInfoData modFileInfo + fileInfoObtained := false + for _, v := range modInfoData.LatestFiles { // Choose "newest" version by largest ID if sliceContainsString(v.GameVersions, getCurseforgeVersion(mcVersion)) && v.ID > fileID { fileID = v.ID fileInfoData = v + fileInfoObtained = true } } - 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 == getCurseforgeVersion(mcVersion) && v.ID > fileID { fileID = v.ID + fileInfoObtained = false // Make sure we get the file info } } + if fileInfoObtained { + return fileInfoData, nil + } } if fileID == 0 { return modFileInfo{}, errors.New("mod not available for this minecraft version") } - // The API also provides some files inline, because that's efficient! - for _, v := range modInfoData.LatestFiles { - if v.ID == fileID { - return v, nil - } - } - fileInfoData, err := getFileInfo(modInfoData.ID, fileID) if err != nil { return modFileInfo{}, err