Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions Knossos.NET/Classes/SemanticVersion.cs
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@ private static string PreReleaseSeparateNumbers(string preReleaseString)

/// <summary>
/// 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
/// </summary>
/// <param name="dependencyVersion"></param>
/// <param name="version"></param>
Expand All @@ -276,7 +276,7 @@ public static bool SastifiesDependency(string? dependencyVersion, string? versio
*/
/// <summary>
/// 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
/// </summary>
/// <param name="dependencyVersion"></param>
/// <param name="version"></param>
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions Knossos.NET/Models/Mod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -427,6 +427,10 @@ private List<ModDependency> FilterDependencies(List<ModDependency> 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);
Expand Down
72 changes: 72 additions & 0 deletions Knossos.NET/ViewModels/Templates/DependencyItemViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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);
}
}
}
}
Expand Down
64 changes: 45 additions & 19 deletions Knossos.NET/ViewModels/Templates/DevModPkgMgrViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -90,24 +90,33 @@ 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);
if (dep.version!.Contains("~"))
{
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
Expand All @@ -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);
}
}
Expand Down Expand Up @@ -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<string>();
foreach (var pkg in Packages)
Expand Down
2 changes: 1 addition & 1 deletion Knossos.NET/ViewModels/Templates/Tasks/InstallMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public async Task<bool> 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)
Expand Down
3 changes: 3 additions & 0 deletions Knossos.NET/Views/Templates/DevModPkgMgrView.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@
<ComboBoxItem ToolTip.Tip="Only the selected version">==</ComboBoxItem>
<ComboBoxItem ToolTip.Tip="Higher or equal than the selected version">>=</ComboBoxItem>
<ComboBoxItem ToolTip.Tip="Same minor version, revision equal or better:&#x0a;Dependency: ~1.5.2&#x0a;1.5.1 ->Not Valid&#x0a;1.5.6 -> Valid&#x0a;1.6.0 -> Not valid">~</ComboBoxItem>
<ComboBoxItem ToolTip.Tip="Lower or equal than the selected version">&lt;=</ComboBoxItem>
<ComboBoxItem ToolTip.Tip="Strictly higher than the selected version">></ComboBoxItem>
<ComboBoxItem ToolTip.Tip="Strictly lower than the selected version">&lt;</ComboBoxItem>
</ComboBox>
<ComboBox SelectedIndex="{Binding VersionSelectedIndex}" ItemsSource="{Binding VersionItems}" Grid.Column="3" MinWidth="75" Margin="2" FontWeight="Bold" FontSize="14" VerticalContentAlignment="Top" HorizontalContentAlignment="Center" Background="White" Foreground="Black"></ComboBox>
<!--Packages-->
Expand Down