mirror of
https://github.com/packwiz/packwiz.git
synced 2025-10-14 06:54:32 +02:00
Add option to specify additional game versions (closes #25)
This commit is contained in:
@@ -2,6 +2,7 @@ package curseforge
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/spf13/viper"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -199,6 +200,34 @@ func createModFile(modInfo modInfo, fileInfo modFileInfo, index *core.Index) err
|
||||
return index.RefreshFileWithHash(path, format, hash, true)
|
||||
}
|
||||
|
||||
func matchGameVersion(mcVersion string, modMcVersion string) bool {
|
||||
if getCurseforgeVersion(mcVersion) == modMcVersion {
|
||||
return true
|
||||
} else {
|
||||
for _, v := range viper.GetStringSlice("acceptable-game-versions") {
|
||||
if getCurseforgeVersion(v) == modMcVersion {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func matchGameVersions(mcVersion string, modMcVersions []string) bool {
|
||||
for _, modMcVersion := range modMcVersions {
|
||||
if getCurseforgeVersion(mcVersion) == modMcVersion {
|
||||
return true
|
||||
} else {
|
||||
for _, v := range viper.GetStringSlice("acceptable-game-versions") {
|
||||
if getCurseforgeVersion(v) == modMcVersion {
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type cfUpdateData struct {
|
||||
ProjectID int `mapstructure:"project-id"`
|
||||
FileID int `mapstructure:"file-id"`
|
||||
@@ -271,7 +300,7 @@ func (u cfUpdater) CheckUpdate(mods []core.Mod, mcVersion string) ([]core.Update
|
||||
// For snapshots, curseforge doesn't put them in GameVersionLatestFiles
|
||||
for _, v := range modInfos[i].LatestFiles {
|
||||
// Choose "newest" version by largest ID
|
||||
if sliceContainsString(v.GameVersions, getCurseforgeVersion(mcVersion)) && v.ID > fileID {
|
||||
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID {
|
||||
updateAvailable = true
|
||||
fileID = v.ID
|
||||
fileInfoData = v
|
||||
@@ -284,7 +313,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 == getCurseforgeVersion(mcVersion) && file.ID > fileID {
|
||||
if matchGameVersion(mcVersion, file.GameVersion) && file.ID > fileID {
|
||||
updateAvailable = true
|
||||
fileID = file.ID
|
||||
fileName = file.Name
|
||||
|
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/sahilm/fuzzy"
|
||||
"github.com/spf13/viper"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
@@ -268,7 +269,13 @@ 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, getCurseforgeVersion(mcVersion))
|
||||
|
||||
// If there are more than one acceptable version, we shouldn't filter by game version at all (as we can't filter by multiple)
|
||||
filterGameVersion := getCurseforgeVersion(mcVersion)
|
||||
if len(viper.GetStringSlice("acceptable-game-versions")) > 0 {
|
||||
filterGameVersion = ""
|
||||
}
|
||||
results, err := getSearch(searchTerm, filterGameVersion)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
os.Exit(1)
|
||||
@@ -343,7 +350,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn
|
||||
|
||||
for _, v := range modInfoData.LatestFiles {
|
||||
// Choose "newest" version by largest ID
|
||||
if sliceContainsString(v.GameVersions, getCurseforgeVersion(mcVersion)) && v.ID > fileID {
|
||||
if matchGameVersions(mcVersion, v.GameVersions) && v.ID > fileID {
|
||||
fileID = v.ID
|
||||
fileInfoData = v
|
||||
fileInfoObtained = true
|
||||
@@ -352,7 +359,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn
|
||||
// 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 {
|
||||
if matchGameVersion(mcVersion, v.GameVersion) && v.ID > fileID {
|
||||
fileID = v.ID
|
||||
fileInfoObtained = false // Make sure we get the file info
|
||||
}
|
||||
@@ -363,7 +370,7 @@ func getLatestFile(modInfoData modInfo, mcVersion string, fileID int) (modFileIn
|
||||
}
|
||||
|
||||
if fileID == 0 {
|
||||
return modFileInfo{}, errors.New("mod not available for this minecraft version")
|
||||
return modFileInfo{}, errors.New("mod not available for the configured Minecraft version(s) (use the acceptable-remote-versions option to accept more)")
|
||||
}
|
||||
|
||||
fileInfoData, err := getFileInfo(modInfoData.ID, fileID)
|
||||
|
Reference in New Issue
Block a user