diff --git a/src/UniGetUI.Core.Tools.Tests/ToolsTests.cs b/src/UniGetUI.Core.Tools.Tests/ToolsTests.cs index 965e2fc3a..7f66f0697 100644 --- a/src/UniGetUI.Core.Tools.Tests/ToolsTests.cs +++ b/src/UniGetUI.Core.Tools.Tests/ToolsTests.cs @@ -139,7 +139,7 @@ public void TestSafeQueryString(string query, string expected) } [Fact] - public void TestEnvVariables() + public void TestEnvVariableCreation() { const string ENV1 = "NONEXISTENTENVVARIABLE"; Environment.SetEnvironmentVariable(ENV1, null, EnvironmentVariableTarget.Process); @@ -160,5 +160,30 @@ public void TestEnvVariables() newInfo2.Environment.TryGetValue(ENV1, out string? result3); Assert.Null(result3); } + + [Fact] + public void TestEnvVariableReplacement() + { + const string ENV = "TMP"; + + var expected = Environment.GetEnvironmentVariable(ENV, EnvironmentVariableTarget.User); + + ProcessStartInfo info = CoreTools.UpdateEnvironmentVariables(); + info.Environment.TryGetValue(ENV, out string? result); + Assert.Equal(expected, result); + } + + [Fact] + public void TestEnvVariableYuxtaposition() + { + const string ENV = "PATH"; + + var oldpath = Environment.GetEnvironmentVariable(ENV, EnvironmentVariableTarget.Machine) + ";" + + Environment.GetEnvironmentVariable(ENV, EnvironmentVariableTarget.User); + + ProcessStartInfo info = CoreTools.UpdateEnvironmentVariables(); + info.Environment.TryGetValue(ENV, out string? result); + Assert.Equal(oldpath, result); + } } } diff --git a/src/UniGetUI.Core.Tools/Tools.cs b/src/UniGetUI.Core.Tools/Tools.cs index 7f14277fb..43d5cc785 100644 --- a/src/UniGetUI.Core.Tools/Tools.cs +++ b/src/UniGetUI.Core.Tools/Tools.cs @@ -498,7 +498,16 @@ public static ProcessStartInfo UpdateEnvironmentVariables(ProcessStartInfo info) } foreach (DictionaryEntry env in Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User)) { - info.Environment[env.Key.ToString()] = env.Value?.ToString(); + string key = env.Key.ToString() ?? ""; + string newValue = env.Value?.ToString() ?? ""; + if (info.Environment.TryGetValue(key, out string? oldValue) && oldValue is not null && oldValue.Contains(';') && newValue != "") + { + info.Environment[key] = oldValue + ";" + newValue; + } + else + { + info.Environment[key] = newValue; + } } return info; } diff --git a/src/UniGetUI/Interface/SoftwarePages/AbstractPackagesPage.xaml.cs b/src/UniGetUI/Interface/SoftwarePages/AbstractPackagesPage.xaml.cs index 7c3830b05..1ee939f80 100644 --- a/src/UniGetUI/Interface/SoftwarePages/AbstractPackagesPage.xaml.cs +++ b/src/UniGetUI/Interface/SoftwarePages/AbstractPackagesPage.xaml.cs @@ -487,7 +487,13 @@ public void FilterPackages() } else if (RootNodeForManager.ContainsValue(node)) { - VisibleManagers.Add(RootNodeForManager.First(x => x.Value == node).Key); + IPackageManager manager = RootNodeForManager.First(x => x.Value == node).Key; + VisibleManagers.Add(manager); + if (manager.Capabilities.SupportsCustomSources) + { + foreach (IManagerSource source in manager.SourceFactory.GetAvailableSources()) + if (!VisibleSources.Contains(source)) VisibleSources.Add(source); + } } } } @@ -568,8 +574,8 @@ public void FilterPackages() } FilteredPackages.BlockSorting = false; FilteredPackages.Sort(); - PackageList.InvalidateArrange(); UpdatePackageCount(); + ForceRedrawByScroll(); } /// @@ -793,5 +799,15 @@ private void SelectAllCheckBox_ValueChanged(object sender, RoutedEventArgs e) FilteredPackages.ClearSelection(); } } + + private async void ForceRedrawByScroll() + { + if (PackageList is not null) + { + PackageList.ScrollView?.ScrollTo(0, 1); + await Task.Delay(10); + PackageList.ScrollView?.ScrollTo(0, 0); + } + } } }