@@ -18,14 +18,14 @@ type ModInfoList struct {
1818 Destination string `json:"-"`
1919}
2020type ModInfo struct {
21- Name string `json:"name"`
22- Version string `json:"version"`
23- Title string `json:"title"`
24- Author string `json:"author"`
25- FileName string `json:"file_name"`
26- FactorioVersion string `json:"factorio_version"`
27- Dependencies []string `json:"dependencies"`
28- Compatibility bool `json:"compatibility"`
21+ Name string `json:"name"`
22+ Version string `json:"version"`
23+ Title string `json:"title"`
24+ Author string `json:"author"`
25+ FileName string `json:"file_name"`
26+ FactorioVersion Version `json:"factorio_version"`
27+ Dependencies []string `json:"dependencies"`
28+ Compatibility bool `json:"compatibility"`
2929}
3030
3131func newModInfoList (destination string ) (ModInfoList , error ) {
@@ -74,33 +74,37 @@ func (modInfoList *ModInfoList) listInstalledMods() error {
7474
7575 modInfo .FileName = info .Name ()
7676
77- var baseDependency string
78- for _ , dependency := range modInfo .Dependencies {
79- if strings .HasPrefix (dependency , "base" ) {
80- splittedDep := strings .Split (dependency , "=" )
77+ var base Version
78+ for _ , dep := range modInfo .Dependencies {
79+ dep = strings .TrimSpace (dep )
80+ if dep == "" {
81+ continue
82+ }
8183
82- if len (splittedDep ) == 1 {
83- log .Printf ("basemod without version specified!" )
84- break
85- }
84+ parts := strings .Split (dep , " " )
85+ if len (parts ) != 3 {
86+ log .Printf ("skipping dependency '%s' in '%s': invalid format\n " , dep , modInfo .Name )
87+ }
88+ if parts [0 ] != "base" {
89+ continue
90+ }
8691
87- baseDependency = strings . Split ( dependency , "=" )[ 1 ]
88- break
92+ if parts [ 1 ] != ">=" {
93+ log . Printf ( "skipping dependency '%s' in '%s': unsupported comparison \n " , dep , modInfo . Name )
8994 }
90- }
91- if baseDependency != "" {
92- modInfo .Compatibility , err = checkModCompatibility (baseDependency )
93- if err != nil {
94- log .Printf ("error checking mod compatibility: %s" , err )
95- return err
95+
96+ if err := base .UnmarshalText ([]byte (parts [2 ])); err != nil {
97+ log .Printf ("skipping dependency '%s' in '%s': %v\n " , dep , modInfo .Name , err )
9698 }
99+
100+ break
101+ }
102+
103+ if ! base .Equals (NilVersion ) {
104+ modInfo .Compatibility = ! FactorioServ .Version .Less (base )
97105 } else {
98106 log .Println ("error finding basemodDependency. Using FactorioVersion..." )
99- modInfo .Compatibility , err = checkModCompatibility (modInfo .FactorioVersion + ".0" )
100- if err != nil {
101- log .Printf ("error checking Compatibility with FactorioVersion: %s" , err )
102- return err
103- }
107+ modInfo .Compatibility = ! FactorioServ .Version .Less (modInfo .FactorioVersion )
104108 }
105109
106110 modInfoList .Mods = append (modInfoList .Mods , modInfo )
0 commit comments