@@ -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,43 @@ 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+ var op string
79+ for _ , dep := range modInfo .Dependencies {
80+ dep = strings .TrimSpace (dep )
81+ if dep == "" {
82+ continue
83+ }
84+
85+ parts := strings .Split (dep , " " )
86+ if len (parts ) > 3 {
87+ log .Printf ("skipping dependency '%s' in '%s': invalid format\n " , dep , modInfo .Name )
88+ continue
89+ }
90+ if parts [0 ] != "base" {
91+ continue
92+ }
93+ if len (parts ) == 1 {
94+ base = modInfo .FactorioVersion
95+ op = ">="
96+ continue
97+ }
8198
82- if len (splittedDep ) == 1 {
83- log .Printf ("basemod without version specified!" )
84- break
85- }
99+ op = parts [1 ]
86100
87- baseDependency = strings .Split (dependency , "=" )[1 ]
88- break
101+ if err := base .UnmarshalText ([]byte (parts [2 ])); err != nil {
102+ log .Printf ("skipping dependency '%s' in '%s': %v\n " , dep , modInfo .Name , err )
103+ continue
89104 }
105+
106+ break
90107 }
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
96- }
108+
109+ if ! base .Equals (NilVersion ) {
110+ modInfo .Compatibility = FactorioServ .Version .Compare (base , op )
97111 } else {
98112 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- }
113+ modInfo .Compatibility = ! FactorioServ .Version .Less (modInfo .FactorioVersion )
104114 }
105115
106116 modInfoList .Mods = append (modInfoList .Mods , modInfo )
0 commit comments