11using Addons . Addons ;
2- using Core . All ;
32using Core . All . Enums ;
43using Core . All . Helpers ;
54
@@ -14,7 +13,7 @@ public static class AutoloadModsValidator
1413 /// <param name="campaign">Campaign</param>
1514 /// <param name="mods">Autoload mods</param>
1615 /// <param name="features">Features supported by the port</param>
17- public static bool ValidateAutoloadMod ( AutoloadMod autoloadMod , BaseAddon campaign , IReadOnlyDictionary < AddonId , BaseAddon > mods , List < FeatureEnum > features )
16+ public static bool ValidateAutoloadMod ( AutoloadMod autoloadMod , BaseAddon campaign , IReadOnlyList < BaseAddon > mods , List < FeatureEnum > features )
1817 {
1918 if ( ! autoloadMod . IsEnabled )
2019 {
@@ -41,7 +40,7 @@ public static bool ValidateAutoloadMod(AutoloadMod autoloadMod, BaseAddon campai
4140 return false ;
4241 }
4342
44- //check if campaign is incomatible with this or all addons
43+ //check if campaign is incompatible with this or all addons
4544 if ( campaign . IncompatibleAddons is not null )
4645 {
4746 foreach ( var incompatibleAddon in campaign . IncompatibleAddons )
@@ -84,52 +83,49 @@ public static bool ValidateAutoloadMod(AutoloadMod autoloadMod, BaseAddon campai
8483 private static bool CheckDependencies (
8584 AutoloadMod autoloadMod ,
8685 BaseAddon campaign ,
87- IReadOnlyDictionary < AddonId , BaseAddon > mods )
86+ IReadOnlyList < BaseAddon > mods
87+ )
8888 {
89- if ( autoloadMod . DependentAddons is not null )
89+ if ( autoloadMod . DependentAddons is null )
9090 {
91- byte passedDependenciesCount = 0 ;
91+ return true ;
92+ }
93+
94+ byte passedDependenciesCount = 0 ;
9295
93- foreach ( var dependentAddon in autoloadMod . DependentAddons )
96+ foreach ( var dependentAddon in autoloadMod . DependentAddons )
97+ {
98+ if ( campaign . AddonId . Id . Equals ( dependentAddon . Key , StringComparison . OrdinalIgnoreCase ) &&
99+ ( dependentAddon . Value is null || VersionComparer . Compare ( campaign . AddonId . Version , dependentAddon . Value ) ) )
94100 {
95- if ( campaign . AddonId . Id . Equals ( dependentAddon . Key , StringComparison . OrdinalIgnoreCase ) &&
96- ( dependentAddon . Value is null || VersionComparer . Compare ( campaign . AddonId . Version , dependentAddon . Value ) ) )
97- {
98- passedDependenciesCount ++ ;
99- continue ;
100- }
101+ passedDependenciesCount ++ ;
102+ continue ;
103+ }
104+
105+ if ( campaign . DependentAddons is not null &&
106+ campaign . DependentAddons . TryGetValue ( dependentAddon . Key , out var dependentAddonVersion ) &&
107+ ( dependentAddon . Value is null || VersionComparer . Compare ( dependentAddonVersion , dependentAddon . Value ) ) )
108+ {
109+ passedDependenciesCount ++ ;
110+ continue ;
111+ }
101112
102- if ( campaign . DependentAddons ? . TryGetValue ( dependentAddon . Key , out var dependentAddonVersion ) ?? false &&
103- ( dependentAddon . Value is null || VersionComparer . Compare ( dependentAddonVersion , dependentAddon . Value ) ) )
113+ foreach ( var addon in mods )
114+ {
115+ if ( ! dependentAddon . Key . Equals ( addon . AddonId . Id , StringComparison . InvariantCultureIgnoreCase ) )
104116 {
105- passedDependenciesCount ++ ;
106117 continue ;
107118 }
108119
109- foreach ( var addon in mods )
120+ if ( dependentAddon . Value is null || VersionComparer . Compare ( addon . AddonId . Version , dependentAddon . Value ) )
110121 {
111- if ( ! dependentAddon . Key . Equals ( addon . Key . Id , StringComparison . OrdinalIgnoreCase ) )
112- {
113- continue ;
114- }
115-
116- if ( dependentAddon . Value is null )
117- {
118- passedDependenciesCount ++ ;
119- }
120- else if ( VersionComparer . Compare ( addon . Key . Version , dependentAddon . Value ) )
121- {
122- passedDependenciesCount ++ ;
123- }
122+ passedDependenciesCount ++ ;
124123 }
125124 }
126-
127- return autoloadMod . DependentAddons . Count == passedDependenciesCount ;
128- }
129- else
130- {
131- return true ;
132125 }
126+
127+ return autoloadMod . DependentAddons . Count == passedDependenciesCount ;
128+
133129 }
134130
135131 /// <summary>
@@ -138,30 +134,32 @@ private static bool CheckDependencies(
138134 private static bool CheckIncompatibles (
139135 AutoloadMod autoloadMod ,
140136 BaseAddon campaign ,
141- IReadOnlyDictionary < AddonId , BaseAddon > mods
137+ IReadOnlyList < BaseAddon > mods
142138 )
143139 {
144140 var campaignIncompatibles = campaign . IncompatibleAddons ? . ToDictionary ( ) ?? [ ] ;
145141 campaignIncompatibles . Add ( campaign . AddonId . Id , campaign . AddonId . Version ) ;
146- campaignIncompatibles . AddRange ( mods . Where ( x => x . Value is AutoloadMod { IsEnabled : true } ) . ToDictionary ( x => x . Key . Id , x => x . Key . Version ) ) ;
142+ campaignIncompatibles . AddRange ( mods . Where ( x => x is AutoloadMod { IsEnabled : true } ) . ToDictionary ( x => x . AddonId . Id , x => x . AddonId . Version ) ) ;
147143
148- if ( autoloadMod . IncompatibleAddons is not null )
144+ if ( autoloadMod . IncompatibleAddons is null )
149145 {
150- foreach ( var a in campaignIncompatibles )
146+ return true ;
147+ }
148+
149+ foreach ( var a in campaignIncompatibles )
150+ {
151+ foreach ( var b in autoloadMod . IncompatibleAddons )
151152 {
152- foreach ( var b in autoloadMod . IncompatibleAddons )
153+ if ( ! a . Key . Equals ( b . Key , StringComparison . OrdinalIgnoreCase ) )
153154 {
154- if ( ! a . Key . Equals ( b . Key , StringComparison . OrdinalIgnoreCase ) )
155- {
156- continue ;
157- }
155+ continue ;
156+ }
158157
159- var areEqual = VersionComparer . Compare ( a . Value , b . Value ) ;
158+ var areEqual = VersionComparer . Compare ( a . Value , b . Value ) ;
160159
161- if ( areEqual )
162- {
163- return false ;
164- }
160+ if ( areEqual )
161+ {
162+ return false ;
165163 }
166164 }
167165 }
0 commit comments