diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 2db96b741b..2cea04fc32 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -52,5 +52,6 @@ latest true + $(NoWarn);EnableGenerateDocumentationFile diff --git a/src/UniGetUI.Core.Classes.Tests/TaskRecyclerTests.cs b/src/UniGetUI.Core.Classes.Tests/TaskRecyclerTests.cs index d412fb8d72..85575d8ff1 100644 --- a/src/UniGetUI.Core.Classes.Tests/TaskRecyclerTests.cs +++ b/src/UniGetUI.Core.Classes.Tests/TaskRecyclerTests.cs @@ -1,3 +1,5 @@ +using System.Diagnostics.CodeAnalysis; + namespace UniGetUI.Core.Classes.Tests; public class TaskRecyclerTests @@ -8,16 +10,18 @@ private int MySlowMethod1() return new Random().Next(); } - private class TestClass + private sealed class TestClass { public TestClass() {} + [SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "Instance methods are required to validate TaskRecycler instance-bound delegate behavior.")] public string SlowMethod2() { Thread.Sleep(1000); return new Random().Next().ToString(); } + [SuppressMessage("Performance", "CA1822:Mark members as static", Justification = "Instance methods are required to validate TaskRecycler instance-bound delegate behavior.")] public string SlowMethod3() { Thread.Sleep(1000); diff --git a/src/UniGetUI.Core.Classes/TaskRecycler.cs b/src/UniGetUI.Core.Classes/TaskRecycler.cs index d6ec607ada..94aa9b6d0e 100644 --- a/src/UniGetUI.Core.Classes/TaskRecycler.cs +++ b/src/UniGetUI.Core.Classes/TaskRecycler.cs @@ -93,7 +93,6 @@ public static void RemoveFromCache(Func method) // --------------------------------------------------------------------------------------------------------------- - /// /// Handles running the task if no such task was found on cache, and returning the cached task if it was found. /// diff --git a/src/UniGetUI.Core.Data/CoreCredentialStore.cs b/src/UniGetUI.Core.Data/CoreCredentialStore.cs index e0e281d3f3..ca5ce6eecf 100644 --- a/src/UniGetUI.Core.Data/CoreCredentialStore.cs +++ b/src/UniGetUI.Core.Data/CoreCredentialStore.cs @@ -93,6 +93,7 @@ public static void DeleteSecret(string resourceName, string userName) } } +#if !WINDOWS private static string GetStorageDirectory() => Path.Join(CoreData.UniGetUIDataDirectory, "SecureStorage"); @@ -104,4 +105,5 @@ private static string GetStableFileName(string resourceName, string userName) byte[] hash = SHA256.HashData(Encoding.UTF8.GetBytes($"{resourceName}\n{userName}")); return Convert.ToHexString(hash) + ".secret"; } +#endif } \ No newline at end of file diff --git a/src/UniGetUI.Core.Data/CoreData.cs b/src/UniGetUI.Core.Data/CoreData.cs index 53838dd914..54ec0e31f0 100644 --- a/src/UniGetUI.Core.Data/CoreData.cs +++ b/src/UniGetUI.Core.Data/CoreData.cs @@ -59,7 +59,7 @@ public static string UniGetUIDataDirectory } } else if (IS_PORTABLE is true) { - return PORTABLE_PATH ?? throw new Exception("This shouldn't be possible"); + return PORTABLE_PATH ?? throw new InvalidOperationException("This shouldn't be possible"); } string old_path = Path.Join(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".wingetui"); diff --git a/src/UniGetUI.Core.IconStore/IconDatabase.cs b/src/UniGetUI.Core.IconStore/IconDatabase.cs index 70f9b83483..e18fb4b6c0 100644 --- a/src/UniGetUI.Core.IconStore/IconDatabase.cs +++ b/src/UniGetUI.Core.IconStore/IconDatabase.cs @@ -19,7 +19,6 @@ public struct IconCount public IconCount() { } } - private static IconDatabase? __instance; public static IconDatabase Instance { @@ -57,7 +56,6 @@ public async Task LoadIconAndScreenshotsDatabaseAsync() Logger.ImportantInfo("Downloaded new icons and screenshots successfully!"); - if (!File.Exists(IconsAndScreenshotsFile)) { Logger.Error("Icon Database file not found"); @@ -74,7 +72,6 @@ public async Task LoadIconAndScreenshotsDatabaseAsync() await LoadFromCacheAsync(); } - public async Task LoadFromCacheAsync() { try diff --git a/src/UniGetUI.Core.SecureSettings/SecureSettings.cs b/src/UniGetUI.Core.SecureSettings/SecureSettings.cs index b4f132c0ca..240211119f 100644 --- a/src/UniGetUI.Core.SecureSettings/SecureSettings.cs +++ b/src/UniGetUI.Core.SecureSettings/SecureSettings.cs @@ -34,7 +34,6 @@ public static string ResolveKey(K key) }; } - private static readonly Dictionary _cache = new(); public static class Args diff --git a/src/UniGetUI.Core.Settings.Tests/SettingsTest.cs b/src/UniGetUI.Core.Settings.Tests/SettingsTest.cs index ede74dc344..f568c5da00 100644 --- a/src/UniGetUI.Core.Settings.Tests/SettingsTest.cs +++ b/src/UniGetUI.Core.Settings.Tests/SettingsTest.cs @@ -18,7 +18,7 @@ public sealed class SerializableTest public SerializableTestSub sub { get; set; } } - public class SettingsTest + public class SettingsTest : IDisposable { private readonly string _testRoot; @@ -50,7 +50,6 @@ public void Dispose() private string GetNewSettingPath(string fileName) => Path.Combine(_newConfigurationDirectory, fileName); private string GetOldSettingsPath(string fileName) => Path.Combine(_oldConfigurationDirectory, fileName); - [Fact] public void TestSettingsSaveToNewDirectory() { @@ -175,7 +174,9 @@ public void TestListSettings(string SettingName, string[] ls1Array, int[] ls2Arr Assert.Equal("this is now a test case", Settings.GetListItem(SettingName, 3)); Assert.Null(Settings.GetListItem(SettingName, 4)); - Assert.Equal(Settings.GetListItem(SettingName, 0), JsonSerializer.Deserialize>(File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json")), Settings.SerializationOptions)[0]); + List? persistedList = JsonSerializer.Deserialize>(File.ReadAllText(Path.Join(CoreData.UniGetUIUserConfigurationDirectory, $"{SettingName}.json")), Settings.SerializationOptions); + Assert.NotNull(persistedList); + Assert.Equal(Settings.GetListItem(SettingName, 0), persistedList[0]); Settings.ClearList(SettingName); Assert.Empty(Settings.GetList(SettingName) ?? ["this shouldn't be null; something's wrong"]); diff --git a/src/UniGetUI.Core.Settings/SettingsEngine_Dictionaries.cs b/src/UniGetUI.Core.Settings/SettingsEngine_Dictionaries.cs index 6de0da2a4b..fc20b728f1 100644 --- a/src/UniGetUI.Core.Settings/SettingsEngine_Dictionaries.cs +++ b/src/UniGetUI.Core.Settings/SettingsEngine_Dictionaries.cs @@ -10,7 +10,7 @@ public static partial class Settings private static readonly ConcurrentDictionary> _dictionarySettings = new(); // Returns an empty dictionary if the setting doesn't exist and null if the types are invalid - private static Dictionary _getDictionary(K key) + private static Dictionary? _getDictionary(K key) where KeyT : notnull { string setting = ResolveKey(key); @@ -73,7 +73,7 @@ public static partial class Settings } // Returns an empty dictionary if the setting doesn't exist and null if the types are invalid - public static IReadOnlyDictionary GetDictionary(K settingsKey) + public static IReadOnlyDictionary? GetDictionary(K settingsKey) where KeyT : notnull { return _getDictionary(settingsKey); diff --git a/src/UniGetUI.Core.Tools/DWMThreadHelper.cs b/src/UniGetUI.Core.Tools/DWMThreadHelper.cs index 752386dce9..0621627d3a 100644 --- a/src/UniGetUI.Core.Tools/DWMThreadHelper.cs +++ b/src/UniGetUI.Core.Tools/DWMThreadHelper.cs @@ -144,7 +144,6 @@ private static void ChangeState(bool suspend, IntPtr expectedAdress, ref bool Is return; } - if (suspend) { uint res = SuspendThread(hThread); diff --git a/src/UniGetUI.Core.Tools/IntegrityTester.cs b/src/UniGetUI.Core.Tools/IntegrityTester.cs index acb204b92a..2915e710c1 100644 --- a/src/UniGetUI.Core.Tools/IntegrityTester.cs +++ b/src/UniGetUI.Core.Tools/IntegrityTester.cs @@ -10,8 +10,8 @@ public static class IntegrityTester { public class MismatchedHash { - public string Got; - public string Expected; + public string Got = string.Empty; + public string Expected = string.Empty; } public struct Result diff --git a/src/UniGetUI.Core.Tools/SerializationHelpers.cs b/src/UniGetUI.Core.Tools/SerializationHelpers.cs index 945d35ab0d..25e502d5aa 100644 --- a/src/UniGetUI.Core.Tools/SerializationHelpers.cs +++ b/src/UniGetUI.Core.Tools/SerializationHelpers.cs @@ -42,7 +42,7 @@ private static string xml_to_json(string XML) } // Attributes dictionary - var dict = new Dictionary(); + var dict = new Dictionary(); if (node.Attributes?.Count > 0) { foreach (XmlAttribute attr in node.Attributes) @@ -52,14 +52,14 @@ private static string xml_to_json(string XML) } // Group child elements - var children = new Dictionary>(); + var children = new Dictionary>(); foreach (XmlNode child in node.ChildNodes) { if (child is XmlElement childElement) { var value = _convertXmlNode(childElement); if (!children.ContainsKey(childElement.Name)) - children[childElement.Name] = new List(); + children[childElement.Name] = new List(); children[childElement.Name].Add(value); } } diff --git a/src/UniGetUI.Core.Tools/Tools.cs b/src/UniGetUI.Core.Tools/Tools.cs index 26c52f7a78..9e6a27dbaa 100644 --- a/src/UniGetUI.Core.Tools/Tools.cs +++ b/src/UniGetUI.Core.Tools/Tools.cs @@ -268,7 +268,6 @@ public static bool IsAdministrator() public static Task GetFileSizeAsLongAsync(Uri? url) => Task.Run(() => GetFileSizeAsLong(url)); - public static long GetFileSizeAsLong(Uri? url) { if (url is null) return 0; @@ -318,7 +317,6 @@ or HttpStatusCode.RedirectMethod or HttpStatusCode.TemporaryRedirect public static Task GetFileNameAsync(Uri url) => Task.Run(() => GetFileName(url)); - public struct Version: IComparable { public static readonly Version Null = new(-1, -1, -1, -1); @@ -679,13 +677,22 @@ public static string TextProgressGenerator(int length, int progressPercent, stri int done = (int)((progressPercent / 100.0) * (length)); int rest = length - done; - return new StringBuilder() + StringBuilder builder = new StringBuilder() .Append('[') - .Append(new string('#', done)) - .Append(new string('.', rest)) - .Append($"] {progressPercent}%") - .Append(extra is null ? "" : $" ({extra})") - .ToString(); + .Append('#', done) + .Append('.', rest) + .Append("] ") + .Append(progressPercent) + .Append('%'); + + if (extra is not null) + { + builder.Append(" (") + .Append(extra) + .Append(')'); + } + + return builder.ToString(); } public static string FormatAsSize(long number, int decimals = 1) @@ -782,7 +789,6 @@ public static string GetCurrentLocale() public static string MakeValidFileName(string name) => string.Concat(name.Where(x => !_illegalPathChars.Contains(x))); - // Safely wait for a task that may throw an exception we don't care about public static async void FinalizeDangerousTask(Task t) { diff --git a/src/UniGetUI.Interface.BackgroundApi/BackgroundApi.cs b/src/UniGetUI.Interface.BackgroundApi/BackgroundApi.cs index c597865397..8c32acc407 100644 --- a/src/UniGetUI.Interface.BackgroundApi/BackgroundApi.cs +++ b/src/UniGetUI.Interface.BackgroundApi/BackgroundApi.cs @@ -31,7 +31,6 @@ public class BackgroundApiRunner public event EventHandler? OnUpgradePackage; private IHost? _host; - private bool _running; public BackgroundApiRunner() { @@ -86,7 +85,6 @@ public async Task Start() webBuilder.UseUrls("http://localhost:7058"); }); _host = builder.Build(); - _running = true; await _host.StartAsync(); Logger.Info("Api running on http://localhost:7058"); } @@ -100,7 +98,9 @@ private async Task V2_ShowPackage(HttpContext context) return; } - OnShowSharedPackage?.Invoke(null, new KeyValuePair(query["pid"], query["psource"])); + string packageId = query["pid"].ToString(); + string packageSource = query["psource"].ToString(); + OnShowSharedPackage?.Invoke(null, new KeyValuePair(packageId, packageSource)); await context.Response.WriteAsync("{\"status\": \"success\"}"); } @@ -193,7 +193,8 @@ private async Task WIDGETS_V1_UpdatePackage(HttpContext context) return; } - OnUpgradePackage?.Invoke(null, id); + string packageId = id.ToString(); + OnUpgradePackage?.Invoke(null, packageId); context.Response.StatusCode = 200; } @@ -225,8 +226,9 @@ private async Task WIDGETS_V1_UpdateAllPackagesForSource(HttpContext context) return; } - Logger.Info($"[WIDGETS] Updating all packages for manager {source}"); - OnUpgradeAllForManager?.Invoke(null, source); + string sourceName = source.ToString(); + Logger.Info($"[WIDGETS] Updating all packages for manager {sourceName}"); + OnUpgradeAllForManager?.Invoke(null, sourceName); context.Response.StatusCode = 200; } @@ -248,7 +250,8 @@ private async Task WIDGETS_V2_GetIconForPackage(HttpContext context) string iconPath = Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Images", "package_color.png"); - IPackage? package = UpgradablePackagesLoader.Instance.GetPackageForId(packageId, packageSource); + string resolvedPackageId = packageId.ToString(); + IPackage? package = UpgradablePackagesLoader.Instance.GetPackageForId(resolvedPackageId, packageSource); if (package != null) { var iconUrl = await Task.Run(package.GetIconUrl); @@ -266,7 +269,7 @@ private async Task WIDGETS_V2_GetIconForPackage(HttpContext context) var bytes = await File.ReadAllBytesAsync(iconPath); var ext = Path.GetExtension(iconPath).TrimStart('.').ToLower(); context.Response.ContentType = IconCacheEngine.ExtensionToMime.GetValueOrDefault(ext, "image/png"); - await context.Response.Body.WriteAsync(bytes, 0, bytes.Length); + await context.Response.Body.WriteAsync(bytes.AsMemory()); } public async Task Stop() diff --git a/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs b/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs index 0990646fb6..8765a87b3e 100644 --- a/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs +++ b/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs @@ -152,7 +152,7 @@ private static async void PackageEndpoint(IPackage package, string endpoint, TEL { try { - if (result is null && eventSource is null) throw new NullReferenceException("result and eventSource cannot be both null!"); + if (result is null && eventSource is null) throw new ArgumentException("result and eventSource cannot both be null"); if (Settings.Get(Settings.K.DisableTelemetry)) return; await CoreTools.WaitForInternetConnection(); string ID = GetRandomizedId(); @@ -187,7 +187,6 @@ private static async void PackageEndpoint(IPackage package, string endpoint, TEL } } - // ------------------------------------------------------------------------- public static void ImportBundle(BundleFormatType type) diff --git a/src/UniGetUI.PAckageEngine.Interfaces/ManagerProperties.cs b/src/UniGetUI.PAckageEngine.Interfaces/ManagerProperties.cs index aff3376d32..d2e4b0cf86 100644 --- a/src/UniGetUI.PAckageEngine.Interfaces/ManagerProperties.cs +++ b/src/UniGetUI.PAckageEngine.Interfaces/ManagerProperties.cs @@ -5,11 +5,13 @@ namespace UniGetUI.PackageEngine.ManagerClasses.Manager { public struct ManagerProperties { + private const IconType DefaultIconId = (IconType)'\uE916'; + public bool IsDummy = false; public string Name { get; set; } = "Unset"; public string? DisplayName { get; set; } public string Description { get; set; } = "Unset"; - public IconType IconId { get; set; } = IconType.Help; + public IconType IconId { get; set; } = DefaultIconId; public string ColorIconId { get; set; } = "Unset"; // public string ExecutableCallArgs { get; set; } = "Unset"; public string ExecutableFriendlyName { get; set; } = "Unset"; diff --git a/src/UniGetUI.PackageEngine.Managers.Cargo/CratesIOClient.cs b/src/UniGetUI.PackageEngine.Managers.Cargo/CratesIOClient.cs index 0b8944ee91..06cd428f2f 100644 --- a/src/UniGetUI.PackageEngine.Managers.Cargo/CratesIOClient.cs +++ b/src/UniGetUI.PackageEngine.Managers.Cargo/CratesIOClient.cs @@ -4,21 +4,21 @@ namespace UniGetUI.PackageEngine.Managers.CargoManager; -internal record CargoManifest +internal sealed record CargoManifest { public CargoManifestCategory[]? categories { get; init; } public required CargoManifestCrate crate { get; init; } public required CargoManifestVersion[] versions { get; init; } } -internal record CargoManifestCategory +internal sealed record CargoManifestCategory { public required string category { get; init; } public required string description { get; init; } public required string id { get; init; } } -internal record CargoManifestCrate +internal sealed record CargoManifestCrate { public string[]? categories { get; init; } public string? description { get; init; } @@ -34,7 +34,7 @@ internal record CargoManifestCrate public string? updated_at { get; init; } } -internal record CargoManifestVersion +internal sealed record CargoManifestVersion { public string[]? bin_names { get; init; } public required string checksum { get; init; } @@ -48,19 +48,19 @@ internal record CargoManifestVersion public bool yanked { get; init; } } -internal record CargoManifestVersionWrapper +internal sealed record CargoManifestVersionWrapper { public required CargoManifestVersion version { get; init; } } -internal class CargoManifestPublisher +internal sealed class CargoManifestPublisher { public string? avatar { get; init; } public required string name { get; init; } public string? url { get; init; } } -internal class CratesIOClient +internal sealed class CratesIOClient { public const string ApiUrl = "https://crates.io/api/v1"; diff --git a/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgDetailsHelper.cs b/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgDetailsHelper.cs index bb249cdf4e..2a7be33bbf 100644 --- a/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgDetailsHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.Cargo/Helpers/CargoPkgDetailsHelper.cs @@ -35,7 +35,7 @@ protected override void GetDetails_UnSafe(IPackageDetails details) } var keywords = manifest.crate.keywords is null ? [] : (string[]) manifest.crate.keywords.Clone(); - var categories = manifest.categories?.Select(c => c.category); + var categories = manifest.categories?.Select(c => c.category) ?? []; details.Tags = [.. keywords, .. categories]; var versionData = manifest.versions.Where((v) => v.num == details.Package.VersionString).First(); diff --git a/src/UniGetUI.PackageEngine.Managers.Dotnet/DotNet.cs b/src/UniGetUI.PackageEngine.Managers.Dotnet/DotNet.cs index 9180fbf470..70a421afab 100644 --- a/src/UniGetUI.PackageEngine.Managers.Dotnet/DotNet.cs +++ b/src/UniGetUI.PackageEngine.Managers.Dotnet/DotNet.cs @@ -17,8 +17,8 @@ namespace UniGetUI.PackageEngine.Managers.DotNetManager { public class DotNet : BaseNuGet { - public static new string[] FALSE_PACKAGE_IDS = [""]; - public static new string[] FALSE_PACKAGE_VERSIONS = [""]; + public static string[] FALSE_PACKAGE_IDS = [""]; + public static string[] FALSE_PACKAGE_VERSIONS = [""]; public DotNet() { diff --git a/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGet.cs b/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGet.cs index 547bbd0646..1b6cbfcdf1 100644 --- a/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGet.cs +++ b/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGet.cs @@ -76,7 +76,6 @@ protected sealed override IReadOnlyList FindPackages_UnSafe(string quer logger.Log($"Begin package search with url={SearchUrl} on manager {Name}"); Dictionary AlreadyProcessedPackages = []; - using HttpClient client = new(CoreTools.GenericHttpClientParameters); client.DefaultRequestHeaders.UserAgent.ParseAdd(CoreData.UserAgentString); @@ -237,7 +236,6 @@ protected sealed override IReadOnlyList GetInstalledPackages_UnSafe() protected abstract IReadOnlyList _getInstalledPackages_UnSafe(); - } } diff --git a/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGetDetailsHelper.cs b/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGetDetailsHelper.cs index 6a9faf4a71..677b83c708 100644 --- a/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGetDetailsHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.Generic.NuGet/BaseNuGetDetailsHelper.cs @@ -125,7 +125,6 @@ protected override void GetDetails_UnSafe(IPackageDetails details) } } - logger.Close(0); return; } diff --git a/src/UniGetUI.PackageEngine.Managers.Pip/Pip.cs b/src/UniGetUI.PackageEngine.Managers.Pip/Pip.cs index e21ef40bb3..b7f5e4a64f 100644 --- a/src/UniGetUI.PackageEngine.Managers.Pip/Pip.cs +++ b/src/UniGetUI.PackageEngine.Managers.Pip/Pip.cs @@ -14,8 +14,8 @@ namespace UniGetUI.PackageEngine.Managers.PipManager { public class Pip : PackageManager { - public static new string[] FALSE_PACKAGE_IDS = ["", "WARNING:", "[notice]", "Package", "DEPRECATION:"]; - public static new string[] FALSE_PACKAGE_VERSIONS = ["", "Ignoring", "invalid"]; + public static string[] FALSE_PACKAGE_IDS = ["", "WARNING:", "[notice]", "Package", "DEPRECATION:"]; + public static string[] FALSE_PACKAGE_VERSIONS = ["", "Ignoring", "invalid"]; public Pip() { @@ -376,7 +376,7 @@ protected override void _loadManagerVersion(out string version) if (process.ExitCode is 9009) { - throw new Exception("Microsoft Store python alias is not a valid python install"); + throw new InvalidOperationException("Microsoft Store python alias is not a valid python install"); } } diff --git a/src/UniGetUI.PackageEngine.Managers.Scoop/Helpers/ScoopPkgDetailsHelper.cs b/src/UniGetUI.PackageEngine.Managers.Scoop/Helpers/ScoopPkgDetailsHelper.cs index 1c60dc8736..a727be6b46 100644 --- a/src/UniGetUI.PackageEngine.Managers.Scoop/Helpers/ScoopPkgDetailsHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.Scoop/Helpers/ScoopPkgDetailsHelper.cs @@ -196,7 +196,6 @@ private static void _getDepends(IPackageDetails details, JsonObject? contents) var node = contents?["depends"]; List innerDeps = []; - if(node is JsonValue value) innerDeps.Add(value.GetValue()); else { diff --git a/src/UniGetUI.PackageEngine.Managers.Scoop/Scoop.cs b/src/UniGetUI.PackageEngine.Managers.Scoop/Scoop.cs index 64102a201b..8341913c3d 100644 --- a/src/UniGetUI.PackageEngine.Managers.Scoop/Scoop.cs +++ b/src/UniGetUI.PackageEngine.Managers.Scoop/Scoop.cs @@ -22,8 +22,8 @@ namespace UniGetUI.PackageEngine.Managers.ScoopManager public class Scoop : PackageManager { - public static new string[] FALSE_PACKAGE_IDS = ["No", "WARN"]; - public static new string[] FALSE_PACKAGE_VERSIONS = ["Matches", "Install", "failed", "failed,", "Manifest", "removed", "removed,"]; + public static string[] FALSE_PACKAGE_IDS = ["No", "WARN"]; + public static string[] FALSE_PACKAGE_VERSIONS = ["Matches", "Install", "failed", "failed,", "Manifest", "removed", "removed,"]; private long LastScoopSourceUpdateTime; diff --git a/src/UniGetUI.PackageEngine.Managers.Vcpkg/Vcpkg.cs b/src/UniGetUI.PackageEngine.Managers.Vcpkg/Vcpkg.cs index 93131fab84..3cca7d83a4 100644 --- a/src/UniGetUI.PackageEngine.Managers.Vcpkg/Vcpkg.cs +++ b/src/UniGetUI.PackageEngine.Managers.Vcpkg/Vcpkg.cs @@ -305,7 +305,6 @@ protected override void _loadManagerExecutableFile(out bool found, out string pa var (exeFound, exePath) = GetExecutableFile(); var (rootFound, _) = GetVcpkgRoot(); - if(!rootFound) Logger.Error("Vcpkg root was not found. Please define the %VCPKG_ROOT% environment variable or define it from UniGetUI Settings"); found = exeFound && rootFound; path = exePath; @@ -409,7 +408,12 @@ public static Tuple GetVcpkgRoot() var paths = CoreTools.WhichMultiple("vcpkg"); foreach (string path in paths) { - string dir = Path.GetDirectoryName(path); + string? dir = Path.GetDirectoryName(path); + if (string.IsNullOrEmpty(dir)) + { + continue; + } + // Make sure the root is a valid root not just a random directory if (Path.Exists($"{dir}\\triplets")) { diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/BundledWinGetHelper.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/BundledWinGetHelper.cs index a00cdd10de..882ea86ac2 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/BundledWinGetHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/BundledWinGetHelper.cs @@ -669,7 +669,6 @@ public IReadOnlyList GetSources_UnSafe() } p.Start(); - bool dashesPassed = false; string? line; while ((line = p.StandardOutput.ReadLine()) is not null) diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativePackageHandler.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativePackageHandler.cs index c3f8149d3a..5a9f76f487 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativePackageHandler.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/ClientHelpers/NativePackageHandler.cs @@ -70,7 +70,7 @@ public static void AddPackage(IPackage package, CatalogPackage catalogPackage) return metadata; } - catch (Exception ex) + catch { throw; } diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetSourceHelper.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetSourceHelper.cs index f657370d08..1c72b43e62 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetSourceHelper.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/Helpers/WinGetSourceHelper.cs @@ -12,7 +12,7 @@ internal sealed class WinGetSourceHelper : BaseSourceHelper ["--type", "Microsoft.PreIndexed.Package"], ["--type", "Microsoft.Rest"], ]; - private Dictionary _attemptedSourceTypes = new(); + private readonly Dictionary _attemptedSourceTypes = new(); public WinGetSourceHelper(WinGet manager) : base(manager) { } diff --git a/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs b/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs index 3d58e96962..cb8ea82339 100644 --- a/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs +++ b/src/UniGetUI.PackageEngine.Managers.WinGet/WinGet.cs @@ -20,9 +20,9 @@ namespace UniGetUI.PackageEngine.Managers.WingetManager { public class WinGet : PackageManager { - public static new string[] FALSE_PACKAGE_NAMES = ["", "e(s)", "have", "the", "Id"]; - public static new string[] FALSE_PACKAGE_IDS = ["", "e(s)", "have", "an", "'winget", "pin'", "have", "an", "Version"]; - public static new string[] FALSE_PACKAGE_VERSIONS = ["", "have", "an", "'winget", "pin'", "have", "an", "Version"]; + public static string[] FALSE_PACKAGE_NAMES = ["", "e(s)", "have", "the", "Id"]; + public static string[] FALSE_PACKAGE_IDS = ["", "e(s)", "have", "an", "'winget", "pin'", "have", "an", "Version"]; + public static string[] FALSE_PACKAGE_VERSIONS = ["", "have", "an", "'winget", "pin'", "have", "an", "Version"]; public LocalWinGetSource LocalPcSource { get; } public LocalWinGetSource AndroidSubsystemSource { get; } public LocalWinGetSource SteamSource { get; } diff --git a/src/UniGetUI.PackageEngine.Operations/AbstractOperation_Auxiliaries.cs b/src/UniGetUI.PackageEngine.Operations/AbstractOperation_Auxiliaries.cs index b41d60a12b..71e607e4c1 100644 --- a/src/UniGetUI.PackageEngine.Operations/AbstractOperation_Auxiliaries.cs +++ b/src/UniGetUI.PackageEngine.Operations/AbstractOperation_Auxiliaries.cs @@ -83,7 +83,6 @@ public enum LineType Error } - public struct InnerOperation { public readonly AbstractOperation Operation; diff --git a/src/UniGetUI.PackageEngine.Operations/KillProcessOperation.cs b/src/UniGetUI.PackageEngine.Operations/KillProcessOperation.cs index 6f9582f653..9d8d34342e 100644 --- a/src/UniGetUI.PackageEngine.Operations/KillProcessOperation.cs +++ b/src/UniGetUI.PackageEngine.Operations/KillProcessOperation.cs @@ -8,7 +8,7 @@ namespace UniGetUI.PackageOperations; public class KillProcessOperation: AbstractOperation { - private string ProcessName; + private readonly string ProcessName; public KillProcessOperation(string procName) : base(false) { ProcessName = CoreTools.MakeValidFileName(procName); diff --git a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs index bddbf8e6a7..40853cd143 100644 --- a/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs +++ b/src/UniGetUI.PackageEngine.Operations/PackageOperations.cs @@ -35,7 +35,7 @@ public PackageOperation( OperationType role, bool IgnoreParallelInstalls = false, AbstractOperation? req = null) - : base(!IgnoreParallelInstalls, _getPreInstallOps(options, role, package, req), _getPostInstallOps(options, role, package)) + : base(!IgnoreParallelInstalls, _getPreInstallOps(options, role, req), _getPostInstallOps(options, role, package)) { Package = package; Options = options; @@ -143,7 +143,7 @@ public override Task GetOperationIcon() return TaskRecycler.RunOrAttachAsync(Package.GetIconUrl); } - private static IReadOnlyList _getPreInstallOps(InstallOptions opts, OperationType role, IPackage package, AbstractOperation? preReq = null) + private static IReadOnlyList _getPreInstallOps(InstallOptions opts, OperationType role, AbstractOperation? preReq = null) { List l = new(); if(preReq is not null) l.Add(new(preReq, true)); diff --git a/src/UniGetUI.PackageEngine.Operations/PrePostOperation.cs b/src/UniGetUI.PackageEngine.Operations/PrePostOperation.cs index d806f4dba0..372f6ef02f 100644 --- a/src/UniGetUI.PackageEngine.Operations/PrePostOperation.cs +++ b/src/UniGetUI.PackageEngine.Operations/PrePostOperation.cs @@ -5,7 +5,7 @@ namespace UniGetUI.PackageEngine.Operations; public class PrePostOperation : AbstractOperation { - private string Payload; + private readonly string Payload; public PrePostOperation(string payload) : base(true) { Payload = payload.Replace("\r", "\n").Replace("\n\n", "\n").Replace("\n", "&"); diff --git a/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs b/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs index d80ca9bc2a..45a3fcc1f3 100644 --- a/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs +++ b/src/UniGetUI.PackageEngine.PackageEngine/PEInterface.cs @@ -88,7 +88,6 @@ public static void LoadManagers() } } - public class PackageBundlesLoader_I : PackageBundlesLoader { public PackageBundlesLoader_I(IReadOnlyList managers): base(managers) diff --git a/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs b/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs index 2d36f0e8d1..4dd16cb2bb 100644 --- a/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs +++ b/src/UniGetUI.PackageEngine.PackageLoader/AbstractPackageLoader.cs @@ -295,7 +295,7 @@ public void Remove(IPackage? package) return; } - PackageReference.Remove(HashPackage(package), out IPackage? pkg); + PackageReference.Remove(HashPackage(package), out _); InvokePackagesChangedEvent(true, [], [package]); } diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Classes/NullPackageManager.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Classes/NullPackageManager.cs index b14fdb7392..da7178e90c 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Classes/NullPackageManager.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Classes/NullPackageManager.cs @@ -72,7 +72,7 @@ public NullPackageManager() public Tuple GetExecutableFile() => throw new NotImplementedException(); } - internal class NullSourceHelper : IMultiSourceHelper + internal sealed class NullSourceHelper : IMultiSourceHelper { public ISourceFactory Factory => throw new NotImplementedException(); public string[] GetAddSourceParameters(IManagerSource source) => throw new NotImplementedException(); diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Helpers/BaseSourceHelper.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Helpers/BaseSourceHelper.cs index a06b906d14..93de0d3f8e 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Helpers/BaseSourceHelper.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Manager/Helpers/BaseSourceHelper.cs @@ -12,7 +12,6 @@ public abstract class BaseSourceHelper : IMultiSourceHelper { private const int PackageListingTaskTimeout = 60; - public ISourceFactory Factory { get; } protected IPackageManager Manager; diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs index 81b93483d8..833bf3afb4 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/DesktopShortcutsDatabase.cs @@ -128,7 +128,7 @@ public static List GetAllShortcuts() { var shortcuts = GetShortcutsOnDisk(); - foreach (var item in Settings.GetDictionary(Settings.K.DeletableDesktopShortcuts)) + foreach (var item in GetDatabase()) { if (!shortcuts.Contains(item.Key)) shortcuts.Add(item.Key); diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/IgnoredUpdatesDatabase.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/IgnoredUpdatesDatabase.cs index b237cafa85..618b9dfcb7 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/IgnoredUpdatesDatabase.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/IgnoredUpdatesDatabase.cs @@ -70,7 +70,9 @@ public string StringRepresentation() public static IReadOnlyDictionary GetDatabase() { - return Settings.GetDictionary(Settings.K.IgnoredPackageUpdates) ?? new Dictionary(); + return Settings.GetDictionary(Settings.K.IgnoredPackageUpdates)? + .Where(kvp => kvp.Value is not null) + .ToDictionary(kvp => kvp.Key, kvp => kvp.Value!) ?? new Dictionary(); } public static string GetIgnoredIdForPackage(IPackage package) diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/InstallOptionsFactory.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/InstallOptionsFactory.cs index 061fed14d9..26c242169d 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/InstallOptionsFactory.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/InstallOptionsFactory.cs @@ -25,7 +25,6 @@ public static string Get(IPackage package) => package.Manager.Name.Replace(" ", "").Replace(".", "") + "." + package.Id + ".json"; } - // Loading from disk (package and manager) public static InstallOptions LoadForPackage(IPackage package) => _loadFromDisk(StoragePath.Get(package)); diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/InvalidImportedPackage.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/InvalidImportedPackage.cs index 85072a6f94..9afca9836b 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/InvalidImportedPackage.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/InvalidImportedPackage.cs @@ -132,7 +132,7 @@ public Task GetIgnoredUpdatesVersionAsync() public IReadOnlyList GetInstalledPackages() { - return null; + return []; } public IReadOnlyList GetScreenshots() @@ -170,9 +170,9 @@ public bool NewerVersionIsInstalled() return false; } - public Task GetInstallerFileName() + public Task GetInstallerFileName() { - return Task.FromResult(""); + return Task.FromResult(""); } public bool IsUpdateMinor() diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs index 9f151da4d3..dabdd39343 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs @@ -262,7 +262,6 @@ protected void OnPropertyChanged([CallerMemberName] string? name = null) PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } - public IPackage? GetAvailablePackage() => DiscoverablePackagesLoader.Instance.GetEquivalentPackage(this); diff --git a/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializableBundle.cs b/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializableBundle.cs index b2b533a36d..ee9ea7f8ff 100644 --- a/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializableBundle.cs +++ b/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializableBundle.cs @@ -44,7 +44,6 @@ public class TestSerializableBundle Version = "5.0", }; - [Fact] public void ToAndFromJsonNode() { diff --git a/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializablePackage.cs b/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializablePackage.cs index bd2ef2c968..df9269e05d 100644 --- a/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializablePackage.cs +++ b/src/UniGetUI.PackageEngine.Serializable.Tests/TestSerializablePackage.cs @@ -23,10 +23,10 @@ public class TestSerializablePackage }; [Theory] - [InlineData("", "", "", "", "")] - [InlineData("UniGetUI", "MartiCliment.UniGetUI.Pre-Release", "3.2.1-beta1", "WinGet", "winget")] - [InlineData("Mr. Trololo", "\n\n\n", "\x12", "\r", "beanz")] - public void ToAndFromJsonNode(string id, string name, string version, string manager, string source) + [InlineData("", "", "", "")] + [InlineData("UniGetUI", "MartiCliment.UniGetUI.Pre-Release", "3.2.1-beta1", "WinGet")] + [InlineData("Mr. Trololo", "\n\n\n", "\x12", "\r")] + public void ToAndFromJsonNode(string id, string name, string version, string manager) { var originalObject1 = new SerializablePackage() { diff --git a/src/UniGetUI.PackageEngine.Serializable/InstallOptions.cs b/src/UniGetUI.PackageEngine.Serializable/InstallOptions.cs index eff09655c1..c9532f7def 100644 --- a/src/UniGetUI.PackageEngine.Serializable/InstallOptions.cs +++ b/src/UniGetUI.PackageEngine.Serializable/InstallOptions.cs @@ -74,7 +74,6 @@ public class InstallOptions: SerializableComponent public readonly ConcurrentDictionary _strVal = new(); public readonly ConcurrentDictionary> _listVal = new(); - public bool SkipHashCheck { get => _boolVal[SKIP_HASH]; set => _boolVal[SKIP_HASH] = value; } public bool InteractiveInstallation { get => _boolVal[INTERACTIVE]; set => _boolVal[INTERACTIVE] = value; } public bool RunAsAdministrator { get => _boolVal[AS_ADMIN]; set => _boolVal[AS_ADMIN] = value; } diff --git a/src/UniGetUI.PackageEngine.Serializable/SerializableBundle.cs b/src/UniGetUI.PackageEngine.Serializable/SerializableBundle.cs index c08a5ccd2d..99109f23c4 100644 --- a/src/UniGetUI.PackageEngine.Serializable/SerializableBundle.cs +++ b/src/UniGetUI.PackageEngine.Serializable/SerializableBundle.cs @@ -12,7 +12,6 @@ public class SerializableBundle: SerializableComponent "or because the package manager was unavailable. " + "Nevertheless, they have been listed here for logging purposes."; - public double export_version { get; set; } = 3; public List packages { get; set; } = []; public string incompatible_packages_info { get; set; } = IncompatMessage; diff --git a/src/UniGetUI.PackageEngine.Serializable/SerializablePackage.cs b/src/UniGetUI.PackageEngine.Serializable/SerializablePackage.cs index 6a6bfd4d93..016887561e 100644 --- a/src/UniGetUI.PackageEngine.Serializable/SerializablePackage.cs +++ b/src/UniGetUI.PackageEngine.Serializable/SerializablePackage.cs @@ -73,7 +73,6 @@ public SerializablePackage(JsonNode data) : base(data) { } - /// /// Returns an equivalent copy of the current package as an Invalid Serializable Package. /// The reverse operation is not possible, since data is lost. diff --git a/src/UniGetUI/App.xaml.cs b/src/UniGetUI/App.xaml.cs index b317d2e21c..3f492efe30 100644 --- a/src/UniGetUI/App.xaml.cs +++ b/src/UniGetUI/App.xaml.cs @@ -253,10 +253,7 @@ private void InitializeMainWindow() var windowId = Microsoft.UI.Win32Interop.GetWindowIdFromWindow(hWnd); var appWindow = Microsoft.UI.Windowing.AppWindow.GetFromWindowId(windowId); - if (appWindow is not null) - { - appWindow.Closing += MainWindow.HandleClosingEvent; - } + appWindow?.Closing += MainWindow.HandleClosingEvent; MainWindow.DoEntryTextAnimationAsync(); } diff --git a/src/UniGetUI/AppOperationHelper.cs b/src/UniGetUI/AppOperationHelper.cs index 52a2bc7f8a..481adb063b 100644 --- a/src/UniGetUI/AppOperationHelper.cs +++ b/src/UniGetUI/AppOperationHelper.cs @@ -110,7 +110,6 @@ public static void Remove(AbstractOperation op) savePicker.FileTypeChoices.Add("Tarball", [".tar"]); savePicker.FileTypeChoices.Add("Compressed Tarball", [".tgz"]); - StorageFile file = await savePicker.PickSaveFileAsync(); DialogHelper.HideLoadingDialog(loadingId); diff --git a/src/UniGetUI/AutoUpdater.cs b/src/UniGetUI/AutoUpdater.cs index 7544256344..01baa7eaab 100644 --- a/src/UniGetUI/AutoUpdater.cs +++ b/src/UniGetUI/AutoUpdater.cs @@ -4,6 +4,7 @@ using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; using System.Text.Json; +using System.Text.Json.Serialization; using Microsoft.Win32; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; @@ -17,7 +18,7 @@ namespace UniGetUI; -public class AutoUpdater +public partial class AutoUpdater { private const string REGISTRY_PATH = @"Software\Devolutions\UniGetUI"; private const string DEFAULT_PRODUCTINFO_URL = "https://devolutions.net/productinfo.json"; @@ -38,6 +39,8 @@ public class AutoUpdater "50f753333811ff11f1920274afde3ffd4468b210", ]; + private static readonly AutoUpdaterJsonContext ProductInfoJsonContext = new(SerializationHelpers.DefaultOptions); + public static Window Window = null!; public static InfoBar Banner = null!; //------------------------------------------------------------------------------------------------------------------ @@ -204,7 +207,10 @@ private static async Task CheckForUpdatesFromProductInfo(Update productInfo = await client.GetStringAsync(updaterOverrides.ProductInfoUrl); } - Dictionary? productInfoRoot = JsonSerializer.Deserialize>(productInfo, SerializationHelpers.DefaultOptions); + Dictionary? productInfoRoot = JsonSerializer.Deserialize( + productInfo, + typeof(Dictionary), + ProductInfoJsonContext) as Dictionary; if (productInfoRoot is null || productInfoRoot.Count == 0) { throw new FormatException("productinfo.json content is empty or invalid"); @@ -699,4 +705,10 @@ private sealed class ProductInfoFile public string Hash { get; set; } = string.Empty; } + [JsonSourceGenerationOptions(AllowTrailingCommas = true)] + [JsonSerializable(typeof(Dictionary))] + private sealed partial class AutoUpdaterJsonContext : JsonSerializerContext + { + } + } diff --git a/src/UniGetUI/CLIHandler.cs b/src/UniGetUI/CLIHandler.cs index b6999209ad..f22eaf547c 100644 --- a/src/UniGetUI/CLIHandler.cs +++ b/src/UniGetUI/CLIHandler.cs @@ -26,7 +26,6 @@ public static class CLIHandler public const string ENABLE_SECURE_SETTING_FOR_USER = SecureSettings.Args.ENABLE_FOR_USER; public const string DISABLE_SECURE_SETTING_FOR_USER = SecureSettings.Args.DISABLE_FOR_USER; - private enum HRESULT { SUCCESS = 0, diff --git a/src/UniGetUI/Controls/CustomNavViewItem.cs b/src/UniGetUI/Controls/CustomNavViewItem.cs index 3788f57bcb..9b6da38c58 100644 --- a/src/UniGetUI/Controls/CustomNavViewItem.cs +++ b/src/UniGetUI/Controls/CustomNavViewItem.cs @@ -6,7 +6,7 @@ using UniGetUI.Interface.Widgets; namespace UniGetUI.Controls; -internal partial class CustomNavViewItem : NavigationViewItem +internal sealed partial class CustomNavViewItem : NavigationViewItem { int _iconSize = 28; public IconType LocalIcon diff --git a/src/UniGetUI/Controls/MenuForPackage.cs b/src/UniGetUI/Controls/MenuForPackage.cs index 5be99bb2ba..cfb5556ef3 100644 --- a/src/UniGetUI/Controls/MenuForPackage.cs +++ b/src/UniGetUI/Controls/MenuForPackage.cs @@ -71,7 +71,6 @@ public partial class BetterTabViewItem : TabViewItem public IconType IconName { set => IconSource = new LocalIconSource(value); } - public BetterTabViewItem() { IsClosable = false; diff --git a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs index 397393388b..cd5fb35cd4 100644 --- a/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs +++ b/src/UniGetUI/Controls/OperationWidgets/OperationControl.cs @@ -31,7 +31,7 @@ public partial class OperationControl: INotifyPropertyChanged public BetterMenu OpMenu; public OperationStatus? MenuStateOnLoaded; public ObservableCollection Badges = []; - private int _errorCount = 0; + private int _errorCount; public OperationControl(AbstractOperation operation) { @@ -127,7 +127,7 @@ private void OnOperationFailed(object? sender, EventArgs e) private async Task _onOperationFinished() { // Remove progress notification (if any) - AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier + "progress"); + _ = AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier + "progress"); if (Operation.Status is OperationStatus.Failed) { @@ -228,7 +228,10 @@ private void OnOperationStatusChanged(object? sender, OperationStatus newStatus) } } - public async Task LiveLineClick() + public void LiveLineClick() + => _ = LiveLineClickAsync(); + + private async Task LiveLineClickAsync() { if (Operation.Status is OperationStatus.Failed or OperationStatus.Canceled) { @@ -405,7 +408,7 @@ private void ShowProgressToast() try { - AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier + "progress"); + _ = AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier + "progress"); AppNotificationBuilder builder = new AppNotificationBuilder() .SetScenario(AppNotificationScenario.Default) .SetTag(Operation.Metadata.Identifier + "progress") @@ -434,7 +437,7 @@ private void ShowSuccessToast() try { - AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier); + _ = AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier); AppNotificationBuilder builder = new AppNotificationBuilder() .SetScenario(AppNotificationScenario.Default) .SetTag(Operation.Metadata.Identifier) @@ -459,7 +462,7 @@ private void ShowErrorToast() try { - AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier); + _ = AppNotificationManager.Default.RemoveByTagAsync(Operation.Metadata.Identifier); AppNotificationBuilder builder = new AppNotificationBuilder() .SetScenario(AppNotificationScenario.Urgent) .SetTag(Operation.Metadata.Identifier) diff --git a/src/UniGetUI/Controls/PackageWrapper.cs b/src/UniGetUI/Controls/PackageWrapper.cs index ca9edc465b..c6fb52787e 100644 --- a/src/UniGetUI/Controls/PackageWrapper.cs +++ b/src/UniGetUI/Controls/PackageWrapper.cs @@ -93,8 +93,10 @@ public void PackageItemContainer_PreviewKeyDown(object sender, KeyRoutedEventArg public void PackageItemContainer_RightTapped(object sender, RightTappedRoutedEventArgs e) => _page.PackageItemContainer_RightTapped(sender, e); + public void RightClick() + => _ = RightClickAsync(); - public async Task RightClick() + private async Task RightClickAsync() { await _page.ShowContextMenu(this); } diff --git a/src/UniGetUI/Controls/SettingsWidgets/CheckboxCard.cs b/src/UniGetUI/Controls/SettingsWidgets/CheckboxCard.cs index 51fd5a4ae8..2f10e84b7e 100644 --- a/src/UniGetUI/Controls/SettingsWidgets/CheckboxCard.cs +++ b/src/UniGetUI/Controls/SettingsWidgets/CheckboxCard.cs @@ -109,7 +109,7 @@ public partial class CheckboxCard_Dict : CheckboxCard public override event EventHandler? StateChanged; private Settings.K _dictName = Settings.K.Unset; - private bool _disableStateChangedEvent = false; + private bool _disableStateChangedEvent; private string _keyName = ""; public string KeyName { set diff --git a/src/UniGetUI/Controls/TranslatedTextBlock.xaml.cs b/src/UniGetUI/Controls/TranslatedTextBlock.xaml.cs index d7eb2977b1..871e421f3a 100644 --- a/src/UniGetUI/Controls/TranslatedTextBlock.xaml.cs +++ b/src/UniGetUI/Controls/TranslatedTextBlock.xaml.cs @@ -42,10 +42,7 @@ public void ApplyText(string? text) try { if (text is not null) __text = CoreTools.Translate(text); - if (_textBlock is not null) - { - _textBlock.Text = __prefix + __text + __suffix; - } + _textBlock?.Text = __prefix + __text + __suffix; } catch (Exception ex) { diff --git a/src/UniGetUI/CrashHandler.cs b/src/UniGetUI/CrashHandler.cs index e7da71ac82..28a7a84840 100644 --- a/src/UniGetUI/CrashHandler.cs +++ b/src/UniGetUI/CrashHandler.cs @@ -67,7 +67,6 @@ public static void ReportFatalException(Exception e) { Debugger.Break(); - if (!Environment.GetCommandLineArgs().Contains(CLIHandler.NO_CORRUPT_DIALOG)) { Exception? fileEx = e; @@ -95,7 +94,7 @@ public static void ReportFatalException(Exception e) // ignored } - string GetExceptionData(Exception e) + static string GetExceptionData(Exception e) { try { @@ -126,7 +125,6 @@ string GetExceptionData(Exception e) iReport += ex.GetType() + ": " + ex.Message; } - string Error_String = $$""" Environment details: Windows version: {{Environment.OSVersion.VersionString}} diff --git a/src/UniGetUI/MainWindow.xaml.cs b/src/UniGetUI/MainWindow.xaml.cs index f57e016e9b..32366070c3 100644 --- a/src/UniGetUI/MainWindow.xaml.cs +++ b/src/UniGetUI/MainWindow.xaml.cs @@ -63,7 +63,6 @@ public MainWindow() SetTitleBar(MainContentGrid); AppWindow.SetIcon(Path.Join(CoreData.UniGetUIExecutableDirectory, "Assets", "Images", "icon.ico")); - LoadTrayMenu(); ApplyTheme(); ApplyProxyVariableToProcess(); @@ -197,14 +196,6 @@ private void AddToSubtitle(string line) TitleBar.Subtitle = subtitleCollapsed is true? "": _currentSubtitle; } - private void ClearSubtitle() - { - TitleBar.Subtitle = ""; - _currentSubtitle = ""; - _currentSubtitlePxLength = 0; - Title = "UniGetUI"; - } - public void HandleNotificationActivation(AppNotificationActivatedEventArgs args) { args.Arguments.TryGetValue("action", out string? action); diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index 80d0557e99..e6394fe28c 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -589,7 +589,6 @@ public static void ShowDismissableBalloon(string title, string message) return null; } - /// /// Asks the user whether to quit or not (there are running operations) /// diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Packages.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Packages.cs index 936af460b1..8a39f1bed2 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Packages.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Packages.cs @@ -130,7 +130,6 @@ public static async Task ConfirmUninstallation(IReadOnlyList pac dialog.SecondaryButtonText = CoreTools.Translate("No"); dialog.DefaultButton = ContentDialogButton.Secondary; - StackPanel p = new(); p.Children.Add(new TextBlock { @@ -367,5 +366,4 @@ public static async Task AskLoseChangesAndCreateBundle() return await DialogHelper.ShowDialogAsync(dialog) is ContentDialogResult.Primary; } - } diff --git a/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs b/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs index 65baf27936..85d6712b15 100644 --- a/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/IgnoredUpdates.xaml.cs @@ -73,7 +73,7 @@ private async Task _yesResetButton_Click() { foreach (IgnoredPackageEntry package in ignoredPackages.ToArray()) { - await package.RemoveFromIgnoredUpdates(); + await package.RemoveFromIgnoredUpdatesAsync(); } ConfirmResetFlyout.Hide(); } @@ -128,7 +128,10 @@ public IgnoredPackageEntry(string id, string version, IPackageManager manager, O List = list; } - public async Task RemoveFromIgnoredUpdates() + public void RemoveFromIgnoredUpdates() + => _ = RemoveFromIgnoredUpdatesAsync(); + + public async Task RemoveFromIgnoredUpdatesAsync() { string ignoredId = $"{Manager.Properties.Name.ToLower()}\\{Id}"; await Task.Run(() => IgnoredUpdatesDatabase.Remove(ignoredId)); diff --git a/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml.cs b/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml.cs index 979c87ce2f..30c096e633 100644 --- a/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/InstallOptions_Package.xaml.cs @@ -30,11 +30,11 @@ public sealed partial class InstallOptionsPage : Page public event EventHandler? Close; private readonly OperationType Operation; private readonly string packageInstallLocation; - private bool _uiLoaded; + private bool UiLoaded { get; set; } - public ObservableCollection ProcessesToKill = new(); + public ObservableCollection ProcessesToKill { get; set; } = new(); private readonly ObservableCollection _runningProcesses = new(); - public ObservableCollection SuggestedProcesses = new(); + public ObservableCollection SuggestedProcesses { get; set; } = new(); public InstallOptionsPage(IPackage package, InstallOptions options) : this(package, OperationType.None, options) { } public InstallOptionsPage(IPackage package, OperationType operation, InstallOptions options) @@ -187,7 +187,7 @@ async Task LoadImage() AbortUpdFailedCheck.IsChecked = Options.AbortOnPreUpdateFail; AbortUniFailedCheck.IsChecked = Options.AbortOnPreUninstallFail; - _uiLoaded = true; + UiLoaded = true; EnableDisableControls(operation); _ = LoadIgnoredUpdates(); _ = _loadProcesses(); @@ -407,7 +407,7 @@ private void CloseButton_Click(object sender, RoutedEventArgs e) private async Task GenerateCommand() { - if (!_uiLoaded) return; + if (!UiLoaded) return; InstallOptions options = await GetUpdatedOptions(updateDetachedOptions: false); options = await InstallOptionsFactory.LoadApplicableAsync(this.Package, overridePackageOptions: options); diff --git a/src/UniGetUI/Pages/DialogPages/OperationFailedDialog.xaml.cs b/src/UniGetUI/Pages/DialogPages/OperationFailedDialog.xaml.cs index b64af49419..75f5c611fa 100644 --- a/src/UniGetUI/Pages/DialogPages/OperationFailedDialog.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/OperationFailedDialog.xaml.cs @@ -17,7 +17,7 @@ namespace UniGetUI.Pages.DialogPages; public sealed partial class OperationFailedDialog : Page { public event EventHandler? Close; - Paragraph par; + private readonly Paragraph par; private static SolidColorBrush errorColor = null!; private static SolidColorBrush debugColor = null!; diff --git a/src/UniGetUI/Pages/DialogPages/OperationLiveLogPage.xaml.cs b/src/UniGetUI/Pages/DialogPages/OperationLiveLogPage.xaml.cs index 36d66657f4..82c0fb3238 100644 --- a/src/UniGetUI/Pages/DialogPages/OperationLiveLogPage.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/OperationLiveLogPage.xaml.cs @@ -14,7 +14,7 @@ namespace UniGetUI.Pages.DialogPages; public sealed partial class OperationLiveLogPage : Page { public event EventHandler? Close; - private Paragraph par; + private readonly Paragraph par; private static SolidColorBrush errorColor = null!; private static SolidColorBrush debugColor = null!; private bool LastLineWasProgress; diff --git a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs index 73267e0277..15c7a724e5 100644 --- a/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs +++ b/src/UniGetUI/Pages/DialogPages/PackageDetailsPage.xaml.cs @@ -46,7 +46,7 @@ private enum LayoutMode Unset } - private TEL_InstallReferral InstallReferral; + private readonly TEL_InstallReferral InstallReferral; private LayoutMode __layout_mode = LayoutMode.Unset; public PackageDetailsPage(IPackage package, OperationType role, TEL_InstallReferral referral) diff --git a/src/UniGetUI/Pages/MainView.xaml.cs b/src/UniGetUI/Pages/MainView.xaml.cs index 4543af9fab..65bca78529 100644 --- a/src/UniGetUI/Pages/MainView.xaml.cs +++ b/src/UniGetUI/Pages/MainView.xaml.cs @@ -43,10 +43,10 @@ public enum PageType public sealed partial class MainView : UserControl { - private DiscoverSoftwarePage DiscoverPage; - private SoftwareUpdatesPage UpdatesPage; - private InstalledPackagesPage InstalledPage; - private PackageBundlesPage BundlesPage; + private readonly DiscoverSoftwarePage DiscoverPage; + private readonly SoftwareUpdatesPage UpdatesPage; + private readonly InstalledPackagesPage InstalledPage; + private readonly PackageBundlesPage BundlesPage; private SettingsBasePage? SettingsPage; private SettingsBasePage? ManagersPage; private UniGetUILogPage? UniGetUILogPage; @@ -56,9 +56,9 @@ public sealed partial class MainView : UserControl private PageType OldPage_t = PageType.Null; private PageType CurrentPage_t = PageType.Null; - private List NavigationHistory = new(); + private readonly List NavigationHistory = new(); - AutoSuggestBox MainTextBlock; + private readonly AutoSuggestBox MainTextBlock; public event EventHandler? CanGoBackChanged; public MainView(AutoSuggestBox mainTextBlock) diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Administrator.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Administrator.xaml.cs index b7e9957aeb..68c9ba9d53 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Administrator.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Administrator.xaml.cs @@ -37,7 +37,7 @@ public Administrator() public string ShortTitle => CoreTools.Translate("Administrator rights and other dangerous settings"); public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? NavigationRequested { add { } remove { } } public void ShowRestartBanner(object sender, EventArgs e) => RestartRequired?.Invoke(this, e); @@ -45,6 +45,5 @@ public void ShowRestartBanner(object sender, EventArgs e) public void RestartCache(object sender, EventArgs e) => _ = CoreTools.ResetUACForCurrentProcess(); - } } diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs index db306fa41d..040e264701 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Backup.xaml.cs @@ -44,14 +44,12 @@ public Backup() _ = UpdateGitHubLoginStatus(); } - - public bool CanGoBack => true; public string ShortTitle => CoreTools.Translate("Backup and Restore"); public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? NavigationRequested { add { } remove { } } public void ShowRestartBanner(object? sender, EventArgs e) => RestartRequired?.Invoke(this, e); @@ -188,9 +186,9 @@ private void UpdateCloudControlsEnabled() } private void LoginWithGitHubButton_Click(object sender, RoutedEventArgs e) - => _ = _loginWithGitHubButton_Click(sender, e); + => _ = _loginWithGitHubButton_Click(); - private async Task _loginWithGitHubButton_Click(object sender, RoutedEventArgs e) + private async Task _loginWithGitHubButton_Click() { _isLoading = true; UpdateCloudControlsEnabled(); diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Experimental.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Experimental.xaml.cs index b39fcf4e9c..38799dab5a 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Experimental.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Experimental.xaml.cs @@ -21,7 +21,7 @@ public Experimental() public string ShortTitle => CoreTools.Translate("Experimental settings and developer options"); public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? NavigationRequested { add { } remove { } } public void ShowRestartBanner(object sender, EventArgs e) => RestartRequired?.Invoke(this, e); diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Interface_P.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Interface_P.xaml.cs index f89a5a1550..20b570227a 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Interface_P.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Interface_P.xaml.cs @@ -51,7 +51,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e) public string ShortTitle => CoreTools.Translate("User interface preferences"); public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? NavigationRequested { add { } remove { } } public void ShowRestartBanner(object sender, EventArgs e) => RestartRequired?.Invoke(this, e); diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Internet.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Internet.xaml.cs index 0f1cbadf36..c98f787303 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Internet.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Internet.xaml.cs @@ -18,12 +18,10 @@ namespace UniGetUI.Pages.SettingsPages.GeneralPages public sealed partial class Internet : Page, ISettingsPage { - public Internet() { this.InitializeComponent(); - UsernameBox.PlaceholderText = CoreTools.Translate("Username"); PasswordBox.PlaceholderText = CoreTools.Translate("Password"); @@ -92,7 +90,7 @@ public Internet() public string ShortTitle => CoreTools.Translate("Internet connection settings"); public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? NavigationRequested { add { } remove { } } public void ShowRestartBanner(object sender, EventArgs e) => RestartRequired?.Invoke(this, e); diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Notifications.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Notifications.xaml.cs index 45ca0d5765..15e7f1ced7 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/Notifications.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/Notifications.xaml.cs @@ -45,7 +45,7 @@ protected override void OnNavigatedTo(NavigationEventArgs e) public bool CanGoBack => true; public string ShortTitle => CoreTools.Translate("Notification preferences"); - public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? RestartRequired { add { } remove { } } + public event EventHandler? NavigationRequested { add { } remove { } } } } diff --git a/src/UniGetUI/Pages/SettingsPages/GeneralPages/SettingsHomepage.xaml.cs b/src/UniGetUI/Pages/SettingsPages/GeneralPages/SettingsHomepage.xaml.cs index 93b02aad7f..f3c5eaa7e4 100644 --- a/src/UniGetUI/Pages/SettingsPages/GeneralPages/SettingsHomepage.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/GeneralPages/SettingsHomepage.xaml.cs @@ -16,7 +16,7 @@ public sealed partial class SettingsHomepage : Page, ISettingsPage public bool CanGoBack => false; public string ShortTitle => CoreTools.Translate("WingetUI Settings"); - public event EventHandler? RestartRequired; + public event EventHandler? RestartRequired { add { } remove { } } public event EventHandler? NavigationRequested; diff --git a/src/UniGetUI/Pages/SettingsPages/ManagersPages/ManagersHomepage.xaml.cs b/src/UniGetUI/Pages/SettingsPages/ManagersPages/ManagersHomepage.xaml.cs index 0fa7a5e54d..a23e0c47d7 100644 --- a/src/UniGetUI/Pages/SettingsPages/ManagersPages/ManagersHomepage.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/ManagersPages/ManagersHomepage.xaml.cs @@ -24,13 +24,13 @@ public sealed partial class ManagersHomepage : Page, ISettingsPage public bool CanGoBack => false; public string ShortTitle => CoreTools.Translate("Package manager preferences"); - public event EventHandler? RestartRequired; + public event EventHandler? RestartRequired { add { } remove { } } public event EventHandler? NavigationRequested; - private List managerControls = new(); + private readonly List managerControls = new(); - private bool _isLoadingToggles = false; + private bool _isLoadingToggles; public ManagersHomepage() { this.InitializeComponent(); diff --git a/src/UniGetUI/Pages/SettingsPages/ManagersPages/PackageManager.xaml.cs b/src/UniGetUI/Pages/SettingsPages/ManagersPages/PackageManager.xaml.cs index 310eb6901d..b0d96d4585 100644 --- a/src/UniGetUI/Pages/SettingsPages/ManagersPages/PackageManager.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/ManagersPages/PackageManager.xaml.cs @@ -36,11 +36,11 @@ public sealed partial class PackageManagerPage : Page, ISettingsPage { IPackageManager? Manager; public event EventHandler? RestartRequired; - public event EventHandler? NavigationRequested; + public event EventHandler? NavigationRequested { add { } remove { } } public event EventHandler? ReapplyProperties; public bool CanGoBack => true; public string ShortTitle => Manager is null ? "" : CoreTools.Translate("{0} settings", Manager.DisplayName); - private bool _isLoading = false; + private bool _isLoading; public PackageManagerPage() { @@ -400,7 +400,6 @@ void ApplyManagerState(bool ShowVersion = false) ExecutableComboBox.SelectedValue = selectedValue; ExecutableComboBox.SelectionChanged += ExecutableComboBox_SelectionChanged; - // Load version block text and style if (_isLoading) { diff --git a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs index c1361c6af5..26b023a8f2 100644 --- a/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs +++ b/src/UniGetUI/Pages/SettingsPages/SettingsBasePage.xaml.cs @@ -18,7 +18,7 @@ namespace UniGetUI.Pages.SettingsPages /// public sealed partial class SettingsBasePage : Page, IEnterLeaveListener, IInnerNavigationPage { - bool IsManagers; + private readonly bool IsManagers; public SettingsBasePage(bool isManagers) { IsManagers = isManagers; diff --git a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs index 490b6747d4..1fa30aab2e 100644 --- a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs +++ b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs @@ -170,7 +170,6 @@ protected ItemsView CurrentPackageList private readonly ObservableCollection WrappedPackages = []; private IEnumerable? LastQueryResult; - protected List UsedManagers = []; protected ConcurrentDictionary> UsedSourcesForManager = []; protected ConcurrentDictionary RootNodeForManager = []; @@ -199,9 +198,9 @@ protected string NoPackages_SubtitleText (SHOW_LAST_CHECKED_TIME ? " " + CoreTools.Translate("(Last checked: {0})", LastPackageLoadTime.ToString(CultureInfo.CurrentCulture)) : ""); } - public string QueryBackup { get; set; } + public string QueryBackup { get; set; } = ""; - private string _searchPlaceholder; + private readonly string _searchPlaceholder; public string SearchBoxPlaceholder => _searchPlaceholder; private string TypeQuery = ""; @@ -278,7 +277,6 @@ protected AbstractPackagesPage(PackagesPageData data) ReloadButton.Click += async (_, _) => await LoadPackages(); ReloadButton.Visibility = DISABLE_RELOAD ? Visibility.Collapsed : Visibility.Visible; - // Handle the Enter Pressed event on the MegaQueryBlock MegaQueryBlock.KeyUp += (_, e) => { @@ -444,7 +442,6 @@ private void Loader_PackagesChanged(object? sender, PackagesChangedEvent package FilterPackages(); } - private void Loader_FinishedLoading(object? sender, EventArgs e) { // Ensure we are in the UI thread @@ -616,7 +613,6 @@ private void SelectAndScrollTo(int index, bool focus) throw new InvalidCastException("The layout was not recognized"); } - if (position < CurrentPackageList.ScrollView.VerticalOffset || position > CurrentPackageList.ScrollView.VerticalOffset + CurrentPackageList.ScrollView.ActualHeight) { @@ -792,7 +788,6 @@ protected void ApplyTextAndIconsToToolbar( } } - /// /// Will filter the packages with the query on QueryBlock.Text and put the /// resulting packages on the ItemsView @@ -901,7 +896,6 @@ public void UpdatePackageCount() else if (selected is not 0 && unSelected is 0) SelectAllCheckBox.IsChecked = true; else if (selected is not 0 && unSelected is not 0) SelectAllCheckBox.IsChecked = null; - string GetSubtitleText() { string r = CoreTools.Translate( @@ -912,7 +906,6 @@ string GetSubtitleText() return r; } - if (FilteredPackages.Any()) { BackgroundText.Text = NoPackages_BackgroundText; @@ -1105,7 +1098,6 @@ protected void PerformMainPackageAction(IPackage? package) public void FocusPackageList() => CurrentPackageList.Focus(FocusState.Programmatic); - public async Task ShowContextMenu(PackageWrapper wrapper) { CurrentPackageList.Select(wrapper.Index); diff --git a/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs b/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs index bb18944e7d..cd5710bf03 100644 --- a/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs +++ b/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs @@ -232,7 +232,7 @@ public override async Task LoadPackages() } } - private void Event_SearchPackages(object sender, RoutedEventArgs e) + private void Event_SearchPackages(object? sender, RoutedEventArgs e) { if (QueryBlock.Text.Trim() != "") { diff --git a/src/UniGetUI/Pages/SoftwarePages/PackageBundlesPage.cs b/src/UniGetUI/Pages/SoftwarePages/PackageBundlesPage.cs index d0e40598cb..48e509a474 100644 --- a/src/UniGetUI/Pages/SoftwarePages/PackageBundlesPage.cs +++ b/src/UniGetUI/Pages/SoftwarePages/PackageBundlesPage.cs @@ -627,7 +627,6 @@ static int Comparison(IPackage x, IPackage y) SecureSettings.Get(SecureSettings.K.AllowPrePostOpCommand) && SecureSettings.Get(SecureSettings.K.AllowImportPrePostOpCommands); - foreach (var pkg in DeserializedData.packages) { var opts = pkg.InstallationOptions; @@ -747,7 +746,6 @@ public static IPackage DeserializeIncompatiblePackage(SerializableIncompatiblePa return new InvalidImportedPackage(raw_package, source); } - public async Task CreateBatchScript() { try @@ -814,8 +812,7 @@ public async Task CreateBatchScript() } } - - private string GenerateCommandString(IReadOnlyList names, IReadOnlyList commands) + private static string GenerateCommandString(IReadOnlyList names, IReadOnlyList commands) { return $$""" Clear-Host diff --git a/src/UniGetUI/Pages/SoftwarePages/SoftwareUpdatesPage.cs b/src/UniGetUI/Pages/SoftwarePages/SoftwareUpdatesPage.cs index daff3f196b..e070610abd 100644 --- a/src/UniGetUI/Pages/SoftwarePages/SoftwareUpdatesPage.cs +++ b/src/UniGetUI/Pages/SoftwarePages/SoftwareUpdatesPage.cs @@ -286,7 +286,6 @@ public override void GenerateToolBar() { HelpButton, CoreTools.Translate("Help") } }; - Dictionary Icons = new() { { UpdateAsAdmin, IconType.UAC }, diff --git a/src/UniGetUI/Services/GitHubBackupService.cs b/src/UniGetUI/Services/GitHubBackupService.cs index ea133a3cc3..ec024322b5 100644 --- a/src/UniGetUI/Services/GitHubBackupService.cs +++ b/src/UniGetUI/Services/GitHubBackupService.cs @@ -33,7 +33,7 @@ public async Task UploadPackageBundle(string bundleContents) { var GHClient = _authService.CreateGitHubClient(); if (GHClient is null) - throw new Exception("The GitHub user is not authenticated"); + throw new InvalidOperationException("The GitHub user is not authenticated"); User user = await GHClient.User.Current(); @@ -90,8 +90,7 @@ public async Task> GetAvailableBackups() { var GHClient = _authService.CreateGitHubClient(); if (GHClient is null) - throw new Exception("The GitHub user is not authenticated"); - + throw new InvalidOperationException("The GitHub user is not authenticated"); User user = await GHClient.User.Current(); @@ -110,14 +109,14 @@ public async Task> GetAvailableBackups() { var GHClient = _authService.CreateGitHubClient(); if (GHClient is null) - throw new Exception("The GitHub user is not authenticated"); + throw new InvalidOperationException("The GitHub user is not authenticated"); User user = await GHClient.User.Current(); var candidates = await GHClient.Gist.GetAllForUser(user.Login); Gist? existingBackup = candidates?.FirstOrDefault(g => g?.Description?.EndsWith(GistDescription_EndingKey) ?? false); if (existingBackup is null) - throw new Exception($"The backup {backupName} was not found, yet this name was passed by argument"); + throw new KeyNotFoundException($"The backup {backupName} was not found, yet this name was passed by argument"); existingBackup = await GHClient.Gist.Get(existingBackup.Id); return existingBackup.Files diff --git a/src/WindowsPackageManager.Interop/WindowsPackageManager/ClassModel.cs b/src/WindowsPackageManager.Interop/WindowsPackageManager/ClassModel.cs index de3672cb5b..8718713f4e 100644 --- a/src/WindowsPackageManager.Interop/WindowsPackageManager/ClassModel.cs +++ b/src/WindowsPackageManager.Interop/WindowsPackageManager/ClassModel.cs @@ -8,17 +8,17 @@ internal sealed class ClassModel /// /// Gets the interface for the projected class type generated by CsWinRT /// - public Type InterfaceType { get; init; } + public Type InterfaceType { get; init; } = null!; /// /// Gets the projected class type generated by CsWinRT /// - public Type ProjectedClassType { get; init; } + public Type ProjectedClassType { get; init; } = null!; /// /// Gets the clsids for each context (e.g. OutOfProcProd, OutOfProcDev) /// - public IReadOnlyDictionary Clsids { get; init; } + public IReadOnlyDictionary Clsids { get; init; } = null!; /// /// Get CLSID based on the provided context diff --git a/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerStandardFactory.cs b/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerStandardFactory.cs index 9cbb31efd2..8c147e8fb3 100644 --- a/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerStandardFactory.cs +++ b/src/WindowsPackageManager.Interop/WindowsPackageManager/WindowsPackageManagerStandardFactory.cs @@ -2,12 +2,14 @@ // Licensed under the MIT License. using System.Runtime.InteropServices; +using System.Runtime.Versioning; using Windows.Win32; using Windows.Win32.System.Com; using WinRT; namespace WindowsPackageManager.Interop; +[SupportedOSPlatform("windows5.0")] public class WindowsPackageManagerStandardFactory : WindowsPackageManagerFactory { public WindowsPackageManagerStandardFactory(ClsidContext clsidContext = ClsidContext.Prod, bool allowLowerTrustRegistration = false)