diff --git a/Knossos.NET/Classes/SemanticVersion.cs b/Knossos.NET/Classes/SemanticVersion.cs
index 9b430729..e90a498b 100644
--- a/Knossos.NET/Classes/SemanticVersion.cs
+++ b/Knossos.NET/Classes/SemanticVersion.cs
@@ -258,7 +258,7 @@ private static string PreReleaseSeparateNumbers(string preReleaseString)
///
/// Compares a semantic version string to the version string in the mod dependency to see if it sastifies the requirement.
- /// Version : null -> Any, Version: "4.6.1" -> Only that version, Version: "~4.6.1" -> >=4.6.1 < 4.7.0, Version: ">=4.6.1"->equal or better
+ /// Version : null -> Any, Version: "4.6.1" -> Only that version, Version: "~4.6.1" -> >=4.6.1 < 4.7.0, Version: ">=4.6.1" -> equal or newer, Version: "<=4.6.1" -> equal or older, Version: ">4.6.1" -> newer, Version: "<4.6.1" -> older
///
///
///
@@ -276,7 +276,7 @@ public static bool SastifiesDependency(string? dependencyVersion, string? versio
*/
///
/// Compares a semantic version to the version string in the mod dependency to see if it sastifies the requirement.
- /// Version : null -> Any, Version: "4.6.1" -> Only that version, Version: "~4.6.1" -> >=4.6.1 < 4.7.0, Version: ">=4.6.1"->equal or better
+ /// Version : null -> Any, Version: "4.6.1" -> Only that version, Version: "~4.6.1" -> >=4.6.1 < 4.7.0, Version: ">=4.6.1" -> equal or newer, Version: "<=4.6.1" -> equal or older, Version: ">4.6.1" -> newer, Version: "<4.6.1" -> older
///
///
///
@@ -335,6 +335,18 @@ public static bool SastifiesDependency(string? dependencyVersion, SemanticVersio
return false;
}
+ if (dependencyVersion.Contains(">"))
+ {
+ var versionDep = new SemanticVersion(dependencyVersion.Replace(">", ""));
+ return Compare(version, versionDep) > 0;
+ }
+
+ if (dependencyVersion.Contains("<"))
+ {
+ var versionDep = new SemanticVersion(dependencyVersion.Replace("<", ""));
+ return Compare(version, versionDep) < 0;
+ }
+
if (Compare(version, new SemanticVersion(dependencyVersion)) == 0)
{
return true;
diff --git a/Knossos.NET/Models/Mod.cs b/Knossos.NET/Models/Mod.cs
index 409ba3e2..abb6d9c2 100644
--- a/Knossos.NET/Models/Mod.cs
+++ b/Knossos.NET/Models/Mod.cs
@@ -427,6 +427,10 @@ private List FilterDependencies(List unFilteredDep
{
revisions.Add(d);
}
+ else if (d.version.Contains("<=") || d.version.Contains(">") || d.version.Contains("<"))
+ {
+ //<=, >, < are not yet handled by the dedup logic below; leave them in temp as-is
+ }
else
{
equal.Add(d);
diff --git a/Knossos.NET/ViewModels/Templates/DependencyItemViewModel.cs b/Knossos.NET/ViewModels/Templates/DependencyItemViewModel.cs
index fe94e140..b2bc0db7 100644
--- a/Knossos.NET/ViewModels/Templates/DependencyItemViewModel.cs
+++ b/Knossos.NET/ViewModels/Templates/DependencyItemViewModel.cs
@@ -236,6 +236,42 @@ private void FillAllVersions()
itemVer.Content = "~" + mod.version;
VersionItems.Add(itemVer);
}
+
+ separator = new ComboBoxItem();
+ separator.Content = "--- <= ---";
+ separator.IsEnabled = false;
+ VersionItems.Add(separator);
+
+ foreach (var mod in mods)
+ {
+ var itemVer = new ComboBoxItem();
+ itemVer.Content = "<=" + mod.version;
+ VersionItems.Add(itemVer);
+ }
+
+ separator = new ComboBoxItem();
+ separator.Content = "--- > ---";
+ separator.IsEnabled = false;
+ VersionItems.Add(separator);
+
+ foreach (var mod in mods)
+ {
+ var itemVer = new ComboBoxItem();
+ itemVer.Content = ">" + mod.version;
+ VersionItems.Add(itemVer);
+ }
+
+ separator = new ComboBoxItem();
+ separator.Content = "--- < ---";
+ separator.IsEnabled = false;
+ VersionItems.Add(separator);
+
+ foreach (var mod in mods)
+ {
+ var itemVer = new ComboBoxItem();
+ itemVer.Content = "<" + mod.version;
+ VersionItems.Add(itemVer);
+ }
}
else
{
@@ -266,6 +302,42 @@ private void FillAllVersions()
itemVer.Content = ">=" + build.version;
VersionItems.Add(itemVer);
}
+
+ separator = new ComboBoxItem();
+ separator.Content = "--- <= ---";
+ separator.IsEnabled = false;
+ VersionItems.Add(separator);
+
+ foreach (var build in builds)
+ {
+ var itemVer = new ComboBoxItem();
+ itemVer.Content = "<=" + build.version;
+ VersionItems.Add(itemVer);
+ }
+
+ separator = new ComboBoxItem();
+ separator.Content = "--- > ---";
+ separator.IsEnabled = false;
+ VersionItems.Add(separator);
+
+ foreach (var build in builds)
+ {
+ var itemVer = new ComboBoxItem();
+ itemVer.Content = ">" + build.version;
+ VersionItems.Add(itemVer);
+ }
+
+ separator = new ComboBoxItem();
+ separator.Content = "--- < ---";
+ separator.IsEnabled = false;
+ VersionItems.Add(separator);
+
+ foreach (var build in builds)
+ {
+ var itemVer = new ComboBoxItem();
+ itemVer.Content = "<" + build.version;
+ VersionItems.Add(itemVer);
+ }
}
}
}
diff --git a/Knossos.NET/ViewModels/Templates/DevModPkgMgrViewModel.cs b/Knossos.NET/ViewModels/Templates/DevModPkgMgrViewModel.cs
index a82514ee..9dbbb410 100644
--- a/Knossos.NET/ViewModels/Templates/DevModPkgMgrViewModel.cs
+++ b/Knossos.NET/ViewModels/Templates/DevModPkgMgrViewModel.cs
@@ -90,7 +90,7 @@ public EditorDependencyItem(ModDependency dep, EditorModPackageItem pkgItem, str
FillAllVersions();
- var currentVersion = VersionItems.FirstOrDefault(x => x.Content != null && dep.version != null && x.Content.ToString() == dep.version.Trim().Replace(">=", "").Replace("~", ""));
+ var currentVersion = VersionItems.FirstOrDefault(x => x.Content != null && dep.version != null && x.Content.ToString() == dep.version.Trim().Replace(">=", "").Replace("<=", "").Replace(">", "").Replace("<", "").Replace("~", ""));
if (currentVersion != null)
{
versionSelectedIndex = VersionItems.IndexOf(currentVersion);
@@ -98,16 +98,25 @@ public EditorDependencyItem(ModDependency dep, EditorModPackageItem pkgItem, str
{
versionTypeIndex = 2;
}
+ else if (dep.version!.Contains(">="))
+ {
+ versionTypeIndex = 1;
+ }
+ else if (dep.version!.Contains("<="))
+ {
+ versionTypeIndex = 3;
+ }
+ else if (dep.version!.Contains(">"))
+ {
+ versionTypeIndex = 4;
+ }
+ else if (dep.version!.Contains("<"))
+ {
+ versionTypeIndex = 5;
+ }
else
{
- if (dep.version!.Contains(">="))
- {
- versionTypeIndex = 1;
- }
- else
- {
- versionTypeIndex = 0;
- }
+ versionTypeIndex = 0;
}
}
else
@@ -132,22 +141,31 @@ public EditorDependencyItem(ModDependency dep, EditorModPackageItem pkgItem, str
{
VersionTypeIndex = 2;
}
+ else if (dep.version!.Contains(">="))
+ {
+ VersionTypeIndex = 1;
+ }
+ else if (dep.version!.Contains("<="))
+ {
+ VersionTypeIndex = 3;
+ }
+ else if (dep.version!.Contains(">"))
+ {
+ VersionTypeIndex = 4;
+ }
+ else if (dep.version!.Contains("<"))
+ {
+ VersionTypeIndex = 5;
+ }
else
{
- if (dep.version!.Contains(">="))
- {
- VersionTypeIndex = 1;
- }
- else
- {
- VersionTypeIndex = 0;
- }
+ VersionTypeIndex = 0;
}
} else {
VersionTypeIndex = 0;
}
var itemVer = new ComboBoxItem();
- itemVer.Content = dep.version != null ? dep.version.Replace(">=","").Replace("~", "") : "Any";
+ itemVer.Content = dep.version != null ? dep.version.Replace(">=", "").Replace("<=", "").Replace(">", "").Replace("<", "").Replace("~", "") : "Any";
VersionItems.Add(itemVer);
}
}
@@ -301,7 +319,15 @@ internal void ReloadDependency()
if(depId != "-1" && depId != null)
{
Dependency.id = depId;
- var versionType = VersionTypeIndex == 0 ? string.Empty : VersionTypeIndex == 1 ? ">=" : "~";
+ var versionType = VersionTypeIndex switch
+ {
+ 1 => ">=",
+ 2 => "~",
+ 3 => "<=",
+ 4 => ">",
+ 5 => "<",
+ _ => string.Empty
+ };
Dependency.version = depVersion != "Any" ? versionType+depVersion : null;
var newPkgs = new List();
foreach (var pkg in Packages)
diff --git a/Knossos.NET/ViewModels/Templates/Tasks/InstallMod.cs b/Knossos.NET/ViewModels/Templates/Tasks/InstallMod.cs
index 3e76f791..0f460587 100644
--- a/Knossos.NET/ViewModels/Templates/Tasks/InstallMod.cs
+++ b/Knossos.NET/ViewModels/Templates/Tasks/InstallMod.cs
@@ -70,7 +70,7 @@ public async Task InstallMod(Mod mod, CancellationTokenSource cancelSource
try
{
var fso = mod.GetDependency("FSO");
- if (fso != null && (fso.version == null || SemanticVersion.Compare(fso.version.Replace(">=", "").Replace("<", "").Replace(">", "").Trim(), VPCompression.MinimumFSOVersion) > 0))
+ if (fso != null && (fso.version == null || SemanticVersion.Compare(fso.version.Replace(">=", "").Replace("<=", "").Replace(">", "").Replace("<", "").Replace("~", "").Trim(), VPCompression.MinimumFSOVersion) > 0))
compressMod = true;
}
catch (Exception ex)
diff --git a/Knossos.NET/Views/Templates/DevModPkgMgrView.axaml b/Knossos.NET/Views/Templates/DevModPkgMgrView.axaml
index dd5b805d..d941d765 100644
--- a/Knossos.NET/Views/Templates/DevModPkgMgrView.axaml
+++ b/Knossos.NET/Views/Templates/DevModPkgMgrView.axaml
@@ -78,6 +78,9 @@
==
>=
~
+ <=
+ >
+ <