From ff657a75b733d7b2f1d2e66846fbc9c3c386a636 Mon Sep 17 00:00:00 2001 From: "Aaron (Qilong)" <173288704@qq.com> Date: Tue, 12 Nov 2024 12:20:08 -0500 Subject: [PATCH 1/3] DYN-7753: Revert "simplify file size string" (#15636) --- src/DynamoUtilities/PublicAPI.Unshipped.txt | 1 - src/DynamoUtilities/StringUtilities.cs | 21 +++----- .../PackageDetailItem.cs | 5 +- test/DynamoCoreTests/StringUtilitiesTest.cs | 49 ------------------- 4 files changed, 8 insertions(+), 68 deletions(-) delete mode 100644 test/DynamoCoreTests/StringUtilitiesTest.cs diff --git a/src/DynamoUtilities/PublicAPI.Unshipped.txt b/src/DynamoUtilities/PublicAPI.Unshipped.txt index 405d94fed95..f63b93a55d0 100644 --- a/src/DynamoUtilities/PublicAPI.Unshipped.txt +++ b/src/DynamoUtilities/PublicAPI.Unshipped.txt @@ -234,7 +234,6 @@ static DynamoUtilities.PathHelper.IsValidPath(string filePath) -> bool static DynamoUtilities.PathHelper.isValidXML(string path, out System.Xml.XmlDocument xmlDoc, out System.Exception ex) -> bool static DynamoUtilities.PathHelper.LoadEmbeddedResourceAsString(string resourcePath, System.Reflection.Assembly assembly) -> string static DynamoUtilities.StringUtilities.CapitalizeFirstLetter(string word) -> string -static DynamoUtilities.StringUtilities.SimplifyFileSizeUnit(string size) -> string static DynamoUtilities.TypeSwitch.Case(System.Action action) -> DynamoUtilities.TypeSwitch.CaseInfo static DynamoUtilities.TypeSwitch.Case(System.Action action) -> DynamoUtilities.TypeSwitch.CaseInfo static DynamoUtilities.TypeSwitch.Default(System.Action action) -> DynamoUtilities.TypeSwitch.CaseInfo diff --git a/src/DynamoUtilities/StringUtilities.cs b/src/DynamoUtilities/StringUtilities.cs index 0fe079cee20..be74b03ee45 100644 --- a/src/DynamoUtilities/StringUtilities.cs +++ b/src/DynamoUtilities/StringUtilities.cs @@ -1,3 +1,9 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + namespace DynamoUtilities { /// @@ -17,20 +23,5 @@ public static string CapitalizeFirstLetter(string word) return char.ToUpper(word[0]) + word.Substring(1); } - - /// - /// Replaces 'i' in a file size string - /// - /// The file size string - /// - public static string SimplifyFileSizeUnit(string size) - { - if (string.IsNullOrEmpty(size)) - { - return size; - } - - return size.Replace("i", ""); - } } } diff --git a/src/PackageDetailsViewExtension/PackageDetailItem.cs b/src/PackageDetailsViewExtension/PackageDetailItem.cs index c1173fcf2f0..b61984dab60 100644 --- a/src/PackageDetailsViewExtension/PackageDetailItem.cs +++ b/src/PackageDetailsViewExtension/PackageDetailItem.cs @@ -5,7 +5,6 @@ using Dynamo.Core; using Dynamo.PackageManager; using Dynamo.PythonServices; -using DynamoUtilities; using Greg.Responses; namespace Dynamo.PackageDetails @@ -284,7 +283,7 @@ public PackageDetailItem(string packageName, PackageVersion packageVersion, bool this.CopyRightYear = PackageVersion.copyright_year; this.CanInstall = canInstall; this.IsEnabledForInstall = isEnabledForInstall && canInstall; - this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : StringUtilities.SimplifyFileSizeUnit (PackageVersion.size); + this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : PackageVersion.size; this.Created = GetFormattedDate(PackageVersion.created); this.VersionInformation = GetFlattenedCompatibilityInformation(packageVersion.compatibility_matrix); this.ReleaseNotes = PackageVersion.release_notes_url; @@ -316,7 +315,7 @@ public PackageDetailItem(List versionDetails, string package this.CopyRightYear = PackageVersion.copyright_year; this.CanInstall = canInstall; this.IsEnabledForInstall = isEnabledForInstall && canInstall; - this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : StringUtilities.SimplifyFileSizeUnit (PackageVersion.size); + this.PackageSize = string.IsNullOrEmpty(PackageVersion.size) ? "--" : PackageVersion.size; this.Created = GetFormattedDate(PackageVersion.created); this.VersionInformation = GetFlattenedCompatibilityInformation(packageVersion.compatibility_matrix); this.IsCompatible = PackageManager.VersionInformation.GetVersionCompatibility(versionDetails, PackageVersionNumber); diff --git a/test/DynamoCoreTests/StringUtilitiesTest.cs b/test/DynamoCoreTests/StringUtilitiesTest.cs deleted file mode 100644 index 944da8fdb3d..00000000000 --- a/test/DynamoCoreTests/StringUtilitiesTest.cs +++ /dev/null @@ -1,49 +0,0 @@ -using DynamoUtilities; -using NUnit.Framework; - -namespace Dynamo.Tests -{ - [TestFixture] - class StringUtilitiesTest - { - [TestCase("512 MiB", ExpectedResult = "512 MB")] - [TestCase("1 GiB", ExpectedResult = "1 GB")] - [TestCase("128 KiB", ExpectedResult = "128 KB")] - [TestCase("2 TiB", ExpectedResult = "2 TB")] - [TestCase("0 PiB", ExpectedResult = "0 PB")] - [TestCase("1024 EiB", ExpectedResult = "1024 EB")] - public string ConvertToSIFileSize_StandardUnitsWithI_RemovesI(string input) - { - return StringUtilities.SimplifyFileSizeUnit (input); - } - - [TestCase("512 MB", ExpectedResult = "512 MB")] - [TestCase("1 GB", ExpectedResult = "1 GB")] - [TestCase("128 KB", ExpectedResult = "128 KB")] - public string ConvertToSIFileSize_StandardUnitsWithoutI_Unchanged(string input) - { - return StringUtilities.SimplifyFileSizeUnit (input); - } - - [TestCase("Random Text", ExpectedResult = "Random Text")] - [TestCase("128", ExpectedResult = "128")] - [TestCase("", ExpectedResult = "")] - [TestCase(null, ExpectedResult = null)] - public string ConvertToSIFileSize_NonStandardInputs_Unchanged(string input) - { - return StringUtilities.SimplifyFileSizeUnit (input); - } - - [Test] - public void ConvertToSIFileSize_NullInput_ReturnsNull() - { - Assert.IsNull(StringUtilities.SimplifyFileSizeUnit (null)); - } - - [Test] - public void ConvertToSIFileSize_EmptyString_ReturnsEmptyString() - { - Assert.AreEqual("", StringUtilities.SimplifyFileSizeUnit ("")); - } - } -} From 496183c1383250f9f71161504e2724a4c668d89f Mon Sep 17 00:00:00 2001 From: Deyan Nenov Date: Tue, 12 Nov 2024 20:08:34 +0000 Subject: [PATCH 2/3] DYN-7754: filter exclusivity (#15630) --- src/DynamoCoreWpf/PublicAPI.Unshipped.txt | 2 + .../PackageManagerSearchViewModel.cs | 43 +++++++++++++++ .../Controls/PackageManagerSearchControl.xaml | 1 + ...ckageManagerSearchElementViewModelTests.cs | 53 +++++++++++++++++++ 4 files changed, 99 insertions(+) diff --git a/src/DynamoCoreWpf/PublicAPI.Unshipped.txt b/src/DynamoCoreWpf/PublicAPI.Unshipped.txt index 9b55e04bb31..6fd915b1aa7 100644 --- a/src/DynamoCoreWpf/PublicAPI.Unshipped.txt +++ b/src/DynamoCoreWpf/PublicAPI.Unshipped.txt @@ -874,6 +874,8 @@ Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.FilterName.get - Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.FilterName.set -> void Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.GroupName.get -> string Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.GroupName.set -> void +Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.IsEnabled.get -> bool +Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.IsEnabled.set -> void Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.OnChecked.get -> bool Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.OnChecked.set -> void Dynamo.PackageManager.PackageManagerSearchViewModel.FilterEntry.Tooltip.get -> string diff --git a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs index 9fad081fbd7..abbaa99e46f 100644 --- a/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs +++ b/src/DynamoCoreWpf/ViewModels/PackageManager/PackageManagerSearchViewModel.cs @@ -86,6 +86,22 @@ public class FilterEntry : NotificationObject /// public string Tooltip { get; set; } + /// + /// Controls the IsEnabled status of the filter + /// + private bool isEnabled = true; + + public bool IsEnabled + { + get { return isEnabled; } + set + { + isEnabled = value; + RaisePropertyChanged(nameof(IsEnabled)); + } + } + + /// /// Filter entry click command, notice this is a dynamic command /// with command param set to FilterName so that the code is robust @@ -410,6 +426,33 @@ public bool IsAnyFilterOn private void SetFilterChange() { IsAnyFilterOn = HostFilter.Any(f => f.OnChecked) || NonHostFilter.Any(f => f.OnChecked) || CompatibilityFilter.Any(f => f.OnChecked); + ApplyFilterRules(); + } + + /// + /// Executes any additional logic on the filters + /// + internal void ApplyFilterRules() + { + // Enable/disable Compatibility filters if any HostFilter is on + if (CompatibilityFilter.Any(f => f.OnChecked)) + { + HostFilter.ForEach(x => x.IsEnabled = false); + } + else + { + HostFilter.ForEach(x => x.IsEnabled = true); + } + + // Enable/disable Host filters if any CompatibilityFilter is on + if (HostFilter.Any(f => f.OnChecked)) + { + CompatibilityFilter.ForEach(x => x.IsEnabled = false); + } + else + { + CompatibilityFilter.ForEach(x => x.IsEnabled = true); + } } /// diff --git a/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml b/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml index de24db4ee82..27fc671b8e6 100644 --- a/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml +++ b/src/DynamoCoreWpf/Views/PackageManager/Controls/PackageManagerSearchControl.xaml @@ -262,6 +262,7 @@ + diff --git a/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs b/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs index af29c9c6def..fc9c0989dcf 100644 --- a/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs +++ b/test/DynamoCoreWpfTests/PackageManager/PackageManagerSearchElementViewModelTests.cs @@ -1021,6 +1021,57 @@ public void TestComputeVersionNoDynamoCompatibility() Assert.IsTrue(resultFallbackToDynamo, "Expected compatibility to be true when under host but only Dynamo compatibility is provided."); } + [Test] + public void HostCompatibilityFiltersExclusivity() + { + var mockGreg = new Mock(); + + var clientMock = new Mock(mockGreg.Object, MockMaker.Empty(), string.Empty); + var pmCVM = new Mock(ViewModel, clientMock.Object) { CallBase = true }; + var pmSVM = new PackageManagerSearchViewModel(pmCVM.Object); + pmSVM.RegisterTransientHandlers(); + + pmSVM.HostFilter = new List + { + new FilterEntry("host", "group", "tooltip", pmSVM) { OnChecked = false }, + }; + + pmSVM.CompatibilityFilter = new List + { + new FilterEntry("compatibility", "group", "tooltip", pmSVM) { OnChecked = false }, + }; + + pmSVM.HostFilter.ForEach(f => f.PropertyChanged += pmSVM.filter_PropertyChanged); + pmSVM.CompatibilityFilter.ForEach(f => f.PropertyChanged += pmSVM.filter_PropertyChanged); + + Assert.IsTrue(pmSVM.HostFilter.All(x => x.IsEnabled), "Expect starting filter state to be enabled"); + Assert.IsTrue(pmSVM.CompatibilityFilter.All(x => x.IsEnabled), "Expect starting filter state to be enabled"); + + // Act/Assert Host -> Compatibility + pmSVM.HostFilter.First().OnChecked = true; + pmSVM.ApplyFilterRules(); + + Assert.IsFalse(pmSVM.CompatibilityFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive"); + + pmSVM.HostFilter.First().OnChecked = false; + pmSVM.ApplyFilterRules(); + + Assert.IsTrue(pmSVM.CompatibilityFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive"); + + // Act/Assert Compatibility -> Host + pmSVM.CompatibilityFilter.First().OnChecked = true; + pmSVM.ApplyFilterRules(); + + Assert.IsFalse(pmSVM.HostFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive"); + + pmSVM.CompatibilityFilter.First().OnChecked = false; + pmSVM.ApplyFilterRules(); + + Assert.IsTrue(pmSVM.HostFilter.All(x => x.IsEnabled), "Filter groups should be mutually exclusive"); + } + + #region Compatibility Tests + [Test] public void TestReverseDynamoCompatibilityFromHost() { @@ -1329,5 +1380,7 @@ public void IsVersionCompatible_InValidMaxRange_ReturnsTrueForVersionInsideOfMaj "Expected compatibility to be true when major version is greater than Max major version and there is an invalid max range."); } + #endregion + } } From 740334110a04c19f9991a93819fa8dfeb942c3cf Mon Sep 17 00:00:00 2001 From: Ashish Aggarwal Date: Tue, 12 Nov 2024 15:27:33 -0500 Subject: [PATCH 3/3] DYN-7749 Add back tooltips for Copyright icon with package versions (#15638) --- .../PackageDetailsView.xaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/PackageDetailsViewExtension/PackageDetailsView.xaml b/src/PackageDetailsViewExtension/PackageDetailsView.xaml index 6deba4a0d0b..a1bd4e2f8ee 100644 --- a/src/PackageDetailsViewExtension/PackageDetailsView.xaml +++ b/src/PackageDetailsViewExtension/PackageDetailsView.xaml @@ -468,6 +468,16 @@ Margin="10,0" VerticalAlignment="Center"> + + + + + + + + + +