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 @@ == >= ~ + <= + > + <