Improve error messages when unable to find a CF file/addon

This commit is contained in:
comp500 2022-04-23 20:09:10 +01:00
parent f1eb34d444
commit e29c3022b3
2 changed files with 15 additions and 2 deletions

View File

@ -334,12 +334,14 @@ func searchCurseforgeInternal(args []string, mcVersion string, packLoaderType in
} }
func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoaderType int) (modFileInfo, error) { func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoaderType int) (modFileInfo, error) {
anyFileObtained := false
// 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 fileInfoObtained := false
for _, v := range modInfoData.LatestFiles { for _, v := range modInfoData.LatestFiles {
anyFileObtained = true
// Choose "newest" version by largest ID // Choose "newest" version by largest ID
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID && matchLoaderTypeFileInfo(packLoaderType, v) { if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID && matchLoaderTypeFileInfo(packLoaderType, v) {
fileID = v.ID fileID = v.ID
@ -349,6 +351,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoader
} }
// TODO: change to timestamp-based comparison?? // TODO: change to timestamp-based comparison??
for _, v := range modInfoData.GameVersionLatestFiles { for _, v := range modInfoData.GameVersionLatestFiles {
anyFileObtained = true
// Choose "newest" version by largest ID // Choose "newest" version by largest ID
if matchGameVersion(mcVersion, v.GameVersion) && v.ID > fileID && matchLoaderType(packLoaderType, v.Modloader) { if matchGameVersion(mcVersion, v.GameVersion) && v.ID > fileID && matchLoaderType(packLoaderType, v.Modloader) {
fileID = v.ID fileID = v.ID
@ -360,6 +363,10 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int, packLoader
} }
} }
if !anyFileObtained {
return modFileInfo{}, fmt.Errorf("addon %d has no files", modInfoData.ID)
}
if fileID == 0 { if fileID == 0 {
return modFileInfo{}, errors.New("mod not available for the configured Minecraft version(s) (use the acceptable-game-versions option to accept more) or loader") return modFileInfo{}, errors.New("mod not available for the configured Minecraft version(s) (use the acceptable-game-versions option to accept more) or loader")
} }

View File

@ -168,6 +168,9 @@ func getModInfo(modID int) (modInfo, error) {
if err != nil { if err != nil {
return modInfo{}, err return modInfo{}, err
} }
if resp.StatusCode != 200 {
return modInfo{}, fmt.Errorf("failed to request addon ID %d: %s", modID, resp.Status)
}
err = json.NewDecoder(resp.Body).Decode(&infoRes) err = json.NewDecoder(resp.Body).Decode(&infoRes)
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
@ -175,7 +178,7 @@ func getModInfo(modID int) (modInfo, error) {
} }
if infoRes.ID != modID { if infoRes.ID != modID {
return modInfo{}, fmt.Errorf("unexpected addon ID in CurseForge response: %d/%d", modID, infoRes.ID) return modInfo{}, fmt.Errorf("unexpected addon ID in CurseForge response: %d (expected %d)", infoRes.ID, modID)
} }
return infoRes, nil return infoRes, nil
@ -303,6 +306,9 @@ func getFileInfo(modID int, fileID int) (modFileInfo, error) {
if err != nil { if err != nil {
return modFileInfo{}, err return modFileInfo{}, err
} }
if resp.StatusCode != 200 {
return modFileInfo{}, fmt.Errorf("failed to request file ID %d for addon %d: %s", fileID, modID, resp.Status)
}
err = json.NewDecoder(resp.Body).Decode(&infoRes) err = json.NewDecoder(resp.Body).Decode(&infoRes)
if err != nil && err != io.EOF { if err != nil && err != io.EOF {
@ -310,7 +316,7 @@ func getFileInfo(modID int, fileID int) (modFileInfo, error) {
} }
if infoRes.ID != fileID { if infoRes.ID != fileID {
return modFileInfo{}, fmt.Errorf("unexpected file ID in CurseForge response: %d/%d", modID, infoRes.ID) return modFileInfo{}, fmt.Errorf("unexpected file ID for addon %d in CurseForge response: %d (expected %d)", modID, infoRes.ID, fileID)
} }
return infoRes, nil return infoRes, nil