From c5632a0eeb1f68f5373220a21268673ae33febbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Tue, 4 Feb 2025 23:17:16 +0100 Subject: [PATCH 1/3] Wait for an internet connection to be available when loading packages --- src/UniGetUI.Core.Tools/Tools.cs | 8 +++++--- .../PEInterface.cs | 3 ++- .../AbstractPackageLoader.cs | 16 +++++++++++++++- .../DiscoverablePackagesLoader.cs | 7 ++++++- .../InstalledPackagesLoader.cs | 8 +++++++- .../PackageBundlesLoader.cs | 7 ++++++- .../UpgradablePackagesLoader.cs | 7 ++++++- src/UniGetUI/Pages/SettingsPage.xaml | 6 ++++++ 8 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/UniGetUI.Core.Tools/Tools.cs b/src/UniGetUI.Core.Tools/Tools.cs index ce16a81a3..945c2c361 100644 --- a/src/UniGetUI.Core.Tools/Tools.cs +++ b/src/UniGetUI.Core.Tools/Tools.cs @@ -10,6 +10,7 @@ using UniGetUI.Core.Data; using UniGetUI.Core.Language; using UniGetUI.Core.Logging; +using UniGetUI.Core.SettingsEngine; namespace UniGetUI.Core.Tools { @@ -558,9 +559,10 @@ public static async Task WaitForInternetConnection() public static async Task _waitForInternetConnection() { - Logger.Debug( - "Checking for internet connectivity. Pinging google.com, microsoft.com, couldflare.com and marticliment.com"); - string[] hosts = ["google.com", "microsoft.com", "cloudflare.com", "marticliment.com"]; + if (Settings.Get("DisableWaitForInternetConnection")) return; + + Logger.Debug("Checking for internet connectivity. Pinging google.com, microsoft.com, couldflare.com and marticliment.com"); + string[] hosts = ["google.com", "microsoft.com", "cloudflare.com", "github.com"]; while (true) { foreach (var host in hosts) diff --git a/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs b/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs index 6ae940213..877d3f1de 100644 --- a/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs +++ b/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs @@ -12,6 +12,7 @@ using UniGetUI.PackageEngine.Managers.VcpkgManager; using UniGetUI.PackageEngine.PackageLoader; using System.Collections.ObjectModel; +using UniGetUI.Core.Tools; using UniGetUI.PackageOperations; namespace UniGetUI.PackageEngine @@ -64,8 +65,8 @@ public static void Initialize() Logger.Warn("Timeout: Not all package managers have finished initializing."); } - _ = UpgradablePackagesLoader.ReloadPackages(); _ = InstalledPackagesLoader.ReloadPackages(); + _ = UpgradablePackagesLoader.ReloadPackages(); } } } diff --git a/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs b/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs index 773bfebf6..0adb95415 100644 --- a/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs +++ b/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using UniGetUI.Core.Tools; using UniGetUI.PackageEngine.Interfaces; namespace UniGetUI.PackageEngine.PackageLoader @@ -48,11 +49,18 @@ public List Packages private readonly bool ALLOW_MULTIPLE_PACKAGE_VERSIONS; private readonly bool DISABLE_RELOAD; private readonly bool PACKAGES_CHECKED_BY_DEFAULT; + private readonly bool REQUIRES_INTERNET; protected string LOADER_IDENTIFIER; private int LoadOperationIdentifier; protected IEnumerable Managers { get; private set; } - public AbstractPackageLoader(IEnumerable managers, string identifier, bool AllowMultiplePackageVersions = false, bool DisableReload = false, bool CheckedBydefault = false) + public AbstractPackageLoader( + IEnumerable managers, + string identifier, + bool AllowMultiplePackageVersions, + bool DisableReload, + bool CheckedBydefault, + bool RequiresInternet) { Managers = managers; PackageReference = new ConcurrentDictionary(); @@ -63,6 +71,7 @@ public AbstractPackageLoader(IEnumerable managers, string ident ALLOW_MULTIPLE_PACKAGE_VERSIONS = AllowMultiplePackageVersions; LOADER_IDENTIFIER = identifier; ALLOW_MULTIPLE_PACKAGE_VERSIONS = AllowMultiplePackageVersions; + REQUIRES_INTERNET = RequiresInternet; } /// @@ -108,6 +117,11 @@ public virtual async Task ReloadPackages() IsLoading = true; StartedLoading?.Invoke(this, EventArgs.Empty); + if (REQUIRES_INTERNET) + { + await CoreTools.WaitForInternetConnection(); + } + List>> tasks = new(); foreach (IPackageManager manager in Managers) diff --git a/src/UniGetUI.PackageEngine.PackageLoader/DiscoverablePackagesLoader.cs b/src/UniGetUI.PackageEngine.PackageLoader/DiscoverablePackagesLoader.cs index 0a8a40151..72061917c 100644 --- a/src/UniGetUI.PackageEngine.PackageLoader/DiscoverablePackagesLoader.cs +++ b/src/UniGetUI.PackageEngine.PackageLoader/DiscoverablePackagesLoader.cs @@ -11,7 +11,12 @@ public class DiscoverablePackagesLoader : AbstractPackageLoader private string QUERY_TEXT = string.Empty; public DiscoverablePackagesLoader(IEnumerable managers) - : base(managers, "DISCOVERABLE_PACKAGES", AllowMultiplePackageVersions: false, CheckedBydefault: false) + : base(managers, + identifier: "DISCOVERABLE_PACKAGES", + AllowMultiplePackageVersions: false, + DisableReload: false, + CheckedBydefault: false, + RequiresInternet: true) { Instance = this; } diff --git a/src/UniGetUI.PackageEngine.PackageLoader/InstalledPackagesLoader.cs b/src/UniGetUI.PackageEngine.PackageLoader/InstalledPackagesLoader.cs index 372c87bc8..eca430376 100644 --- a/src/UniGetUI.PackageEngine.PackageLoader/InstalledPackagesLoader.cs +++ b/src/UniGetUI.PackageEngine.PackageLoader/InstalledPackagesLoader.cs @@ -9,7 +9,13 @@ public class InstalledPackagesLoader : AbstractPackageLoader public static InstalledPackagesLoader Instance = null!; public InstalledPackagesLoader(IEnumerable managers) - : base(managers, "INSTALLED_PACKAGES", AllowMultiplePackageVersions: true, CheckedBydefault: false) + : base( + managers, + identifier: "INSTALLED_PACKAGES", + AllowMultiplePackageVersions: true, + DisableReload: false, + CheckedBydefault: false, + RequiresInternet: true) { Instance = this; } diff --git a/src/UniGetUI.PackageEngine.PackageLoader/PackageBundlesLoader.cs b/src/UniGetUI.PackageEngine.PackageLoader/PackageBundlesLoader.cs index e0b64ccb7..0b2c9ae3b 100644 --- a/src/UniGetUI.PackageEngine.PackageLoader/PackageBundlesLoader.cs +++ b/src/UniGetUI.PackageEngine.PackageLoader/PackageBundlesLoader.cs @@ -10,7 +10,12 @@ public class PackageBundlesLoader : AbstractPackageLoader public static PackageBundlesLoader Instance = null!; public PackageBundlesLoader(IEnumerable managers) - : base(managers, "PACKAGE_BUNDLES", AllowMultiplePackageVersions: true, DisableReload: true, CheckedBydefault: false) + : base(managers, + identifier: "PACKAGE_BUNDLES", + AllowMultiplePackageVersions: true, + DisableReload: true, + CheckedBydefault: false, + RequiresInternet: false) { Instance = this; } diff --git a/src/UniGetUI.PackageEngine.PackageLoader/UpgradablePackagesLoader.cs b/src/UniGetUI.PackageEngine.PackageLoader/UpgradablePackagesLoader.cs index 8ed71743e..cd41bf07c 100644 --- a/src/UniGetUI.PackageEngine.PackageLoader/UpgradablePackagesLoader.cs +++ b/src/UniGetUI.PackageEngine.PackageLoader/UpgradablePackagesLoader.cs @@ -18,7 +18,12 @@ public class UpgradablePackagesLoader : AbstractPackageLoader public ConcurrentDictionary IgnoredPackages = new(); public UpgradablePackagesLoader(IEnumerable managers) - : base(managers, "DISCOVERABLE_PACKAGES", AllowMultiplePackageVersions: false, CheckedBydefault: !Settings.Get("DisableSelectingUpdatesByDefault")) + : base(managers, + identifier: "UPGRADABLE_PACKAGES", + AllowMultiplePackageVersions: false, + DisableReload: false, + CheckedBydefault: !Settings.Get("DisableSelectingUpdatesByDefault"), + RequiresInternet: true) { Instance = this; FinishedLoading += (_, _) => StartAutoCheckTimeout(); diff --git a/src/UniGetUI/Pages/SettingsPage.xaml b/src/UniGetUI/Pages/SettingsPage.xaml index b8538b8ae..ef3b322c1 100644 --- a/src/UniGetUI/Pages/SettingsPage.xaml +++ b/src/UniGetUI/Pages/SettingsPage.xaml @@ -361,6 +361,12 @@ SettingName="DisableLangAutoUpdater" StateChanged="DisableDownloadingNewTranslations_StateChanged" /> + Date: Tue, 4 Feb 2025 23:40:23 +0100 Subject: [PATCH 2/3] Update test_publish.cmd --- test_publish.cmd | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test_publish.cmd b/test_publish.cmd index 6b218a38d..4064d8152 100644 --- a/test_publish.cmd +++ b/test_publish.cmd @@ -1,6 +1,6 @@ @echo off -rmdir /q /s src\UniGetUI\bin\x64\Release\net8.0-windows10.0.22621.0\win-x64\publish\ +rmdir /q /s src\UniGetUI\bin\x64\Release\net8.0-windows10.0.26100.0\win-x64\publish\ dotnet publish src/UniGetUI/UniGetUI.csproj /noLogo /property:Configuration=Release /property:Platform=x64 -v m -%signcommand% "src\UniGetUI\bin\x64\Release\net8.0-windows10.0.22621.0\win-x64\publish\UniGetUI.exe" -src\UniGetUI\bin\x64\Release\net8.0-windows10.0.22621.0\win-x64\publish\UniGetUI.exe +%signcommand% "src\UniGetUI\bin\x64\Release\net8.0-windows10.0.26100.0\win-x64\publish\UniGetUI.exe" +src\UniGetUI\bin\x64\Release\net8.0-windows10.0.26100.0\win-x64\publish\UniGetUI.exe pause \ No newline at end of file From 5f96734686467458f4b9f2a61d1809af863073d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Tue, 4 Feb 2025 23:47:06 +0100 Subject: [PATCH 3/3] Fix an issue where local accounts would corrupt WinGet when running things as administrator --- src/UniGetUI.Core.Data/CoreData.cs | 2 +- src/UniGetUI.Core.Tools/Tools.cs | 4 ++-- .../PackageOperations.cs | 21 +++++++++++++------ .../SourceOperations.cs | 4 ++-- src/UniGetUI/App.xaml.cs | 10 ++++----- 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/src/UniGetUI.Core.Data/CoreData.cs b/src/UniGetUI.Core.Data/CoreData.cs index 1c0dc0dc5..2d40f48b0 100644 --- a/src/UniGetUI.Core.Data/CoreData.cs +++ b/src/UniGetUI.Core.Data/CoreData.cs @@ -173,7 +173,7 @@ public static string UniGetUIExecutableFile } } - public static string GSudoPath = ""; + public static string ElevatorPath = ""; /// /// This method will return the most appropriate data directory. diff --git a/src/UniGetUI.Core.Tools/Tools.cs b/src/UniGetUI.Core.Tools/Tools.cs index 945c2c361..6ce6e3763 100644 --- a/src/UniGetUI.Core.Tools/Tools.cs +++ b/src/UniGetUI.Core.Tools/Tools.cs @@ -420,7 +420,7 @@ public static async Task CacheUACForCurrentProcess() { StartInfo = new ProcessStartInfo { - FileName = CoreData.GSudoPath, + FileName = CoreData.ElevatorPath, Arguments = "cache on --pid " + Environment.ProcessId + " -d 1", UseShellExecute = false, RedirectStandardOutput = true, @@ -444,7 +444,7 @@ public static async Task ResetUACForCurrentProcess() { StartInfo = new ProcessStartInfo { - FileName = CoreData.GSudoPath, + FileName = CoreData.ElevatorPath, Arguments = "cache off --pid " + Environment.ProcessId, UseShellExecute = false, RedirectStandardOutput = true, diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index c389502a1..2d91543b2 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -9,6 +9,7 @@ using UniGetUI.PackageEngine.Classes.Packages.Classes; using UniGetUI.PackageEngine.Enums; using UniGetUI.PackageEngine.Interfaces; +using UniGetUI.PackageEngine.Managers.WingetManager; using UniGetUI.PackageEngine.PackageClasses; using UniGetUI.PackageEngine.PackageLoader; using UniGetUI.PackageOperations; @@ -59,7 +60,7 @@ private bool RequiresAdminRights() { return Package.OverridenOptions.RunAsAdministrator is true || Options.RunAsAdministrator - || (Settings.Get("AlwaysElevate" + Package.Manager.Name) && !Package.OverridenOptions.RunAsAdministrator is false); + || (Settings.Get("AlwaysElevate" + Package.Manager.Name) && Package.OverridenOptions.RunAsAdministrator != false); } protected override void ApplyRetryAction(string retryMode) @@ -98,19 +99,27 @@ protected sealed override void PrepareProcessStartInfo() CoreTools.CacheUACForCurrentProcess().GetAwaiter().GetResult(); } - process.StartInfo.FileName = CoreData.GSudoPath; - process.StartInfo.Arguments = - $"\"{Package.Manager.Status.ExecutablePath}\" {Package.Manager.Properties.ExecutableCallArgs} {operation_args}"; + if (Package.Manager is WinGet) + { + string WinGetTemp = Path.Join(Path.GetTempPath(), "UniGetUI", "ElevatedWinGetTemp"); + process.StartInfo.Environment["TEMP"] = WinGetTemp; + process.StartInfo.Environment["TMP"] = WinGetTemp; + } + process.StartInfo.FileName = CoreData.ElevatorPath; + process.StartInfo.Arguments = $"\"{Package.Manager.Status.ExecutablePath}\" {Package.Manager.Properties.ExecutableCallArgs} {operation_args}"; } else { process.StartInfo.FileName = Package.Manager.Status.ExecutablePath; process.StartInfo.Arguments = $"{Package.Manager.Properties.ExecutableCallArgs} {operation_args}"; } - ApplyCapabilities(admin, + + ApplyCapabilities( + admin, Options.InteractiveInstallation, (Options.SkipHashCheck && Role is not OperationType.Uninstall), - Package.OverridenOptions.Scope ?? Options.InstallationScope); + Package.OverridenOptions.Scope ?? Options.InstallationScope + ); } protected sealed override Task GetProcessVeredict(int ReturnCode, string[] Output) diff --git a/src/UniGetUI.PackageEngine.Operations/SourceOperations.cs b/src/UniGetUI.PackageEngine.Operations/SourceOperations.cs index 18a92ede4..0902482e4 100644 --- a/src/UniGetUI.PackageEngine.Operations/SourceOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/SourceOperations.cs @@ -62,7 +62,7 @@ protected override void PrepareProcessStartInfo() } admin = true; - process.StartInfo.FileName = CoreData.GSudoPath; + process.StartInfo.FileName = CoreData.ElevatorPath; process.StartInfo.Arguments = $"\"{Source.Manager.Status.ExecutablePath}\" " + Source.Manager.Properties.ExecutableCallArgs + " " + string.Join(" ", Source.Manager.SourcesHelper.GetAddSourceParameters(Source)); } else @@ -108,7 +108,7 @@ protected override void PrepareProcessStartInfo() { CoreTools.CacheUACForCurrentProcess().GetAwaiter().GetResult(); } - process.StartInfo.FileName = CoreData.GSudoPath; + process.StartInfo.FileName = CoreData.ElevatorPath; process.StartInfo.Arguments = $"\"{Source.Manager.Status.ExecutablePath}\" " + Source.Manager.Properties.ExecutableCallArgs + " " + string.Join(" ", Source.Manager.SourcesHelper.GetRemoveSourceParameters(Source)); } diff --git a/src/UniGetUI/App.xaml.cs b/src/UniGetUI/App.xaml.cs index 06d490deb..c60e4dce7 100644 --- a/src/UniGetUI/App.xaml.cs +++ b/src/UniGetUI/App.xaml.cs @@ -118,7 +118,7 @@ private static async void LoadGSudo() if (!DEBUG && !Settings.Get("DisableUniGetUIElevator")) { Logger.ImportantInfo("Using built-in UniGetUI Elevator"); - CoreData.GSudoPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Utilities", "UniGetUI Elevator.exe"); + CoreData.ElevatorPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Utilities", "UniGetUI Elevator.exe"); } else if (Settings.Get("UseUserGSudo")) { @@ -126,18 +126,18 @@ private static async void LoadGSudo() if (found) { Logger.Info($"Using System GSudo at {gsudo_path}"); - CoreData.GSudoPath = gsudo_path; + CoreData.ElevatorPath = gsudo_path; } else { Logger.Error("System GSudo enabled but not found!"); - CoreData.GSudoPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Utilities", "gsudo.exe"); + CoreData.ElevatorPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Utilities", "gsudo.exe"); } } else { - Logger.Warn($"Using bundled GSudo at {CoreData.GSudoPath} since UniGetUI Elevator is not available!"); - CoreData.GSudoPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Utilities", "gsudo.exe"); + Logger.Warn($"Using bundled GSudo at {CoreData.ElevatorPath} since UniGetUI Elevator is not available!"); + CoreData.ElevatorPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Utilities", "gsudo.exe"); } }