Improved file selection - check both latest and game version latest

This commit is contained in:
comp500 2020-11-11 04:33:49 +00:00
parent 8325f07f18
commit 2ca4ad91f9
2 changed files with 8 additions and 13 deletions

View File

@ -288,6 +288,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string) ([]core.Update
updateAvailable = true updateAvailable = true
fileID = file.ID fileID = file.ID
fileName = file.Name fileName = file.Name
fileInfoObtained = false // Make sure we get the file info again
} }
} }

View File

@ -339,39 +339,33 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn
// For snapshots, curseforge doesn't put them in GameVersionLatestFiles // For snapshots, curseforge doesn't put them in GameVersionLatestFiles
if fileID == 0 { if fileID == 0 {
var fileInfoData modFileInfo var fileInfoData modFileInfo
fileInfoObtained := false
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, getCurseforgeVersion(mcVersion)) && v.ID > fileID { if sliceContainsString(v.GameVersions, getCurseforgeVersion(mcVersion)) && v.ID > fileID {
fileID = v.ID fileID = v.ID
fileInfoData = v fileInfoData = v
fileInfoObtained = true
} }
} }
if fileID != 0 {
return fileInfoData, nil
}
}
if fileID == 0 {
// 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 == getCurseforgeVersion(mcVersion) && v.ID > fileID { if v.GameVersion == getCurseforgeVersion(mcVersion) && v.ID > fileID {
fileID = v.ID fileID = v.ID
fileInfoObtained = false // Make sure we get the file info
} }
} }
if fileInfoObtained {
return fileInfoData, nil
}
} }
if fileID == 0 { if fileID == 0 {
return modFileInfo{}, errors.New("mod not available for this minecraft version") 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) fileInfoData, err := getFileInfo(modInfoData.ID, fileID)
if err != nil { if err != nil {
return modFileInfo{}, err return modFileInfo{}, err