From 9a12f3d589c53f487f3cc9143030434d01b1e8c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Thu, 27 Feb 2025 20:34:27 +0100 Subject: [PATCH 1/9] Add MVP --- src/Directory.Build.props | 3 + src/UniGetUI.Core.Tools/Tools.cs | 7 +- .../Packages/Classes/PackageCacher.cs | 2 +- .../Packages/Package.cs | 37 ++-- src/UniGetUI/Controls/PackageRanking.xaml | 67 +++++++ src/UniGetUI/Controls/PackageRanking.xaml.cs | 172 ++++++++++++++++++ .../SoftwarePages/AbstractPackagesPage.xaml | 8 +- .../SoftwarePages/DiscoverSoftwarePage.cs | 4 + src/UniGetUI/UniGetUI.csproj | 4 +- src/UniGetUI/UniGetUI.csproj.user | 3 + 10 files changed, 282 insertions(+), 25 deletions(-) create mode 100644 src/UniGetUI/Controls/PackageRanking.xaml create mode 100644 src/UniGetUI/Controls/PackageRanking.xaml.cs diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 6dde0a5540..4042d5859b 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -7,6 +7,9 @@ Martí Climent and the contributors Martí Climent enable + + + true diff --git a/src/UniGetUI.Core.Tools/Tools.cs b/src/UniGetUI.Core.Tools/Tools.cs index f6e1bd33c3..3867484b85 100644 --- a/src/UniGetUI.Core.Tools/Tools.cs +++ b/src/UniGetUI.Core.Tools/Tools.cs @@ -146,10 +146,11 @@ public static Tuple Which(string command, bool updateEnv = true) /// /// A string containing the Id of a package /// The formatted string - public static string FormatAsName(string name) + public static string FormatAsName(string name, bool isWinget = false) { - name = - name.Replace(".install", "").Replace(".portable", "").Replace("-", " ").Replace("_", " ").Split("/")[^1] + if (isWinget) name = string.Join('.', name.Split('.')[1..]); + + name = name.Replace(".install", "").Replace(".portable", "").Replace("-", " ").Replace("_", " ").Split("/")[^1] .Split(":")[0]; string newName = ""; for (int i = 0; i < name.Length; i++) diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs index aec03dbd7f..b864f68ae7 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs @@ -3,7 +3,7 @@ namespace UniGetUI.PackageEngine.Classes.Packages { - internal static class PackageCacher + public static class PackageCacher { private static readonly ConcurrentDictionary __available_pkgs = []; private static readonly ConcurrentDictionary __upgradable_pkgs = []; diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs index 6269a77eca..05ef215458 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Package.cs @@ -98,22 +98,7 @@ public Package( ignoredId = IgnoredUpdatesDatabase.GetIgnoredIdForPackage(this); - _iconId = Manager.Name switch - { - "Winget" => Source.Name switch - { - "Steam" => id.ToLower().Split("\\")[^1].Replace("steam app ", "steam:").Trim(), - "Local PC" => id.ToLower().Split("\\")[^1], - "Microsoft Store" => id.IndexOf('_') < id.IndexOf('.') ? // If the first underscore is before the period, this ID has no publisher - string.Join('_', id.ToLower().Split("\\")[1].Split("_")[0..^4]) : // no publisher: remove `MSIX\`, then the standard ending _version_arch__{random id} - string.Join('_', string.Join('.', id.ToLower().Split(".")[1..]).Split("_")[0..^4]), // remove the publisher (before the first .), then the standard _version_arch__{random id} - _ => string.Join('.', id.ToLower().Split(".")[1..]), - }, - "Scoop" => id.ToLower().Replace(".app", ""), - "Chocolatey" => id.ToLower().Replace(".install", "").Replace(".portable", ""), - "vcpkg" => id.ToLower().Split(":")[0].Split("[")[0], - _ => id.ToLower() - }; + _iconId = NormalizeIconId(id, Manager.Name, Source.Name); } /// @@ -134,6 +119,26 @@ public Package( NormalizedNewVersion = CoreTools.VersionStringToStruct(new_version); } + public static string NormalizeIconId(string id, string managerName, string sourceName = "") + { + return managerName switch + { + "Winget" => sourceName switch + { + "Steam" => id.ToLower().Split("\\")[^1].Replace("steam app ", "steam:").Trim(), + "Local PC" => id.ToLower().Split("\\")[^1], + "Microsoft Store" => id.IndexOf('_') < id.IndexOf('.') ? // If the first underscore is before the period, this ID has no publisher + string.Join('_', id.ToLower().Split("\\")[1].Split("_")[0..^4]) : // no publisher: remove `MSIX\`, then the standard ending _version_arch__{random id} + string.Join('_', string.Join('.', id.ToLower().Split(".")[1..]).Split("_")[0..^4]), // remove the publisher (before the first .), then the standard _version_arch__{random id} + _ => string.Join('.', id.ToLower().Split(".")[1..]), + }, + "Scoop" => id.ToLower().Replace(".app", ""), + "Chocolatey" => id.ToLower().Replace(".install", "").Replace(".portable", ""), + "vcpkg" => id.ToLower().Split(":")[0].Split("[")[0], + _ => id.ToLower() + }; + } + public long GetHash() => __hash; diff --git a/src/UniGetUI/Controls/PackageRanking.xaml b/src/UniGetUI/Controls/PackageRanking.xaml new file mode 100644 index 0000000000..d2848d0ce7 --- /dev/null +++ b/src/UniGetUI/Controls/PackageRanking.xaml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/UniGetUI/Controls/PackageRanking.xaml.cs b/src/UniGetUI/Controls/PackageRanking.xaml.cs new file mode 100644 index 0000000000..8c7a2920b3 --- /dev/null +++ b/src/UniGetUI/Controls/PackageRanking.xaml.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Controls.Primitives; +using Microsoft.UI.Xaml.Data; +using Microsoft.UI.Xaml.Input; +using Microsoft.UI.Xaml.Media; +using Microsoft.UI.Xaml.Navigation; +using System.Collections.ObjectModel; +using System.Text.Json; +using UniGetUI.Core.Logging; +using UniGetUI.Core.Tools; +using UniGetUI.PackageEngine.Interfaces; +using Windows.Security.Cryptography.Core; +using UniGetUI.Core.IconEngine; +using UniGetUI.PackageEngine.PackageClasses; +using System.ComponentModel; +using Windows.Devices.SmartCards; +using System.Diagnostics; +using UniGetUI.PackageEngine.Classes.Packages; +using UniGetUI.PackageEngine; + +// To learn more about WinUI, the WinUI project structure, +// and more about our project templates, see: http://aka.ms/winui-project-info. + +namespace UniGetUI.Controls +{ + public sealed partial class PackagesRanking : UserControl + { + public ObservableCollection PopularRank { get; } = new(); + public ObservableCollection InstalledRank { get; } = new(); + public ObservableCollection WallOfShame { get; } = new(); + + public PackagesRanking() + { + this.InitializeComponent(); + } + + public void ReloadButton_Click(object sender, RoutedEventArgs e) + { + _ = Reload(); + } + + public async Task Reload() + { + try + { + PopularRank.Clear(); + InstalledRank.Clear(); + WallOfShame.Clear(); + ReloadRing.Visibility = Visibility.Visible; + + using (HttpClient client = new HttpClient()) + { + var response = await client.GetStringAsync("https://marticliment.com/unigetui/rankings/daily-ranking.json"); + var rankings = JsonSerializer.Deserialize(response); + + foreach (var item in rankings.popular[0..4]) + { + PopularRank.Add(new(item)); + } + + foreach (var item in rankings.installed[0..4]) + { + InstalledRank.Add(new(item)); + } + + foreach (var item in rankings.uninstalled[0..4]) + { + WallOfShame.Add(new(item)); + } + } + + ReloadRing.Visibility = Visibility.Collapsed; + } + catch (Exception ex) + { + Logger.Error(ex); + Logger.Error("Could not load package rankings:"); + ReloadRing.Visibility = Visibility.Collapsed; + } + } + } + + public class Rankings + { + public long timestamp_utc_seconds { get; set; } + public List> popular { get; set; } = new(); + public List> installed { get; set; } = new(); + public List> uninstalled { get; set; } = new(); + } + + public class PackageRankingItem: INotifyPropertyChanged + { + public string Name { get; set; } + public string ManagerName { get; set; } + public Uri IconUri = new Uri("ms-appx:///Assets/Images/package_color.png"); + + private string id; + private string manager; + private string source; + private Package? package; + + public event PropertyChangedEventHandler? PropertyChanged; + + public PackageRankingItem(List item) + { + id = item[0].ToString() ?? ""; + manager = item[1].ToString() ?? ""; + source = item[2].ToString() ?? ""; + package = GetPackage(); + + Name = package?.Name ?? CoreTools.FormatAsName(id, isWinget: source == "winget"); + ManagerName = package?.Source.AsString_DisplayName ?? manager + ": " + source.ToString(); + LoadIcon(); + } + + public async void LoadIcon() + { + if (package is not null) + { + var uri = await Task.Run(package.GetIconUrlIfAny); + if(uri is not null) + { + IconUri = uri; + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IconUri))); + return; + } + } + + var icon = await Task.Run(() => IconDatabase.Instance.GetIconUrlForId(Package.NormalizeIconId(id, manager, source))); + if (icon is not null) + { + IconUri = new Uri(icon); + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IconUri))); + } + } + + public Package? GetPackage() + { + IPackageManager? _manager = null; + foreach (var candidate in PEInterface.Managers) + if (candidate.Name == manager || candidate.DisplayName == manager) + { + _manager = candidate; + break; + } + + if (_manager is null) return null; + if (!_manager.IsEnabled()) return null; + if (!_manager.Status.Found) return null; + + IManagerSource? _source = null; + foreach (var candidate in _manager.Properties.KnownSources) + if (candidate.Name == source) + { + _source = candidate; + break; + } + + if (_source is null) _source = _manager.DefaultSource; + + return new Package(CoreTools.FormatAsName(id, isWinget: source == "winget"), id, "latest", _source, _manager, new()); + } + } +} diff --git a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml index a44affa94b..94c9c4c6c6 100644 --- a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml +++ b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml @@ -12,7 +12,7 @@ mc:Ignorable="d" Name="ABSTRACT_PAGE" NavigationCacheMode="Required" - xmlns:animations="using:CommunityToolkit.WinUI.Animations" xmlns:pkgClasses="using:UniGetUI.PackageEngine.PackageClasses" + xmlns:animations="using:CommunityToolkit.WinUI.Animations" xmlns:pkgClasses="using:UniGetUI.PackageEngine.PackageClasses" xmlns:controls="using:UniGetUI.Controls" CharacterReceived="{x:Bind PackageList_CharacterReceived}"> @@ -936,9 +936,9 @@ - + - + @@ -959,7 +959,7 @@ - + diff --git a/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs b/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs index 1180b1319e..6af392e3c1 100644 --- a/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs +++ b/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs @@ -11,6 +11,7 @@ using Windows.System; using UniGetUI.Interface.Telemetry; using UniGetUI.Pages.DialogPages; +using UniGetUI.Controls; namespace UniGetUI.Interface.SoftwarePages { @@ -52,6 +53,9 @@ public DiscoverSoftwarePage() QueryBlock.KeyUp += (s, e) => { if (e.Key == VirtualKey.Enter) { Event_SearchPackages(s, e); } }; MegaQueryBlock.KeyUp += (s, e) => { if (e.Key == VirtualKey.Enter) { Event_SearchPackages(s, e); } }; + + RankingControl.Visibility = Visibility.Visible; + _ = RankingControl.Reload(); } public override BetterMenu GenerateContextMenu() diff --git a/src/UniGetUI/UniGetUI.csproj b/src/UniGetUI/UniGetUI.csproj index a09c54dacd..7907681d87 100644 --- a/src/UniGetUI/UniGetUI.csproj +++ b/src/UniGetUI/UniGetUI.csproj @@ -24,7 +24,6 @@ None - true false true @@ -172,6 +171,9 @@ Always + + MSBuild:Compile + diff --git a/src/UniGetUI/UniGetUI.csproj.user b/src/UniGetUI/UniGetUI.csproj.user index 9780b68866..921ecf3c7c 100644 --- a/src/UniGetUI/UniGetUI.csproj.user +++ b/src/UniGetUI/UniGetUI.csproj.user @@ -13,6 +13,9 @@ Designer + + Designer + Designer From 422e7c1bd91105cd23d73238d8abfe074d4cb1dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Thu, 27 Feb 2025 20:49:56 +0100 Subject: [PATCH 2/9] Add OnClick action --- src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs | 1 + src/UniGetUI/Controls/PackageRanking.xaml | 2 +- src/UniGetUI/Controls/PackageRanking.xaml.cs | 9 +++++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs b/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs index 991e35cb29..ed35f92679 100644 --- a/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs +++ b/src/UniGetUI.Interface.Telemetry/TelemetryHandler.cs @@ -15,6 +15,7 @@ public enum TEL_InstallReferral FROM_BUNDLE, FROM_WEB_SHARE, ALREADY_INSTALLED, + FROM_RANKING } public enum TEL_OP_RESULT diff --git a/src/UniGetUI/Controls/PackageRanking.xaml b/src/UniGetUI/Controls/PackageRanking.xaml index d2848d0ce7..de7e8eedbd 100644 --- a/src/UniGetUI/Controls/PackageRanking.xaml +++ b/src/UniGetUI/Controls/PackageRanking.xaml @@ -12,7 +12,7 @@ - diff --git a/src/UniGetUI/Controls/PackageRanking.xaml.cs b/src/UniGetUI/Controls/PackageRanking.xaml.cs index 6425a4428b..8c60663139 100644 --- a/src/UniGetUI/Controls/PackageRanking.xaml.cs +++ b/src/UniGetUI/Controls/PackageRanking.xaml.cs @@ -29,6 +29,7 @@ using UniGetUI.Pages.DialogPages; using UniGetUI.Interface.Telemetry; using UniGetUI.PackageEngine.Enums; +using Microsoft.UI.Xaml.Documents; // To learn more about WinUI, the WinUI project structure, // and more about our project templates, see: http://aka.ms/winui-project-info. @@ -44,6 +45,21 @@ public sealed partial class PackagesRanking : UserControl public PackagesRanking() { this.InitializeComponent(); + + (PopularDescription.Blocks[0] as Paragraph)?.Inlines.Add(new Run { Text = CoreTools.Translate("The most popular packages among UniGetUI users.") + " " }); + var link = new Hyperlink { NavigateUri = new Uri("about:blank") }; + link.Inlines.Add(new Run() { Text = CoreTools.Translate("More info") }); + (PopularDescription.Blocks[0] as Paragraph)?.Inlines.Add(link); + + (InstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(new Run { Text = CoreTools.Translate("Packages installed the most through UniGetUI.") + " " }); + link = new Hyperlink { NavigateUri = new Uri("about:blank") }; + link.Inlines.Add(new Run() { Text = CoreTools.Translate("More info") }); + (InstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(link); + + (UninstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(new Run { Text = CoreTools.Translate("Packages that have been uninstalled the most times through UniGetUI.") + " " }); + link = new Hyperlink { NavigateUri = new Uri("about:blank") }; + link.Inlines.Add(new Run() { Text = CoreTools.Translate("More info") }); + (UninstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(link); } public void ReloadButton_Click(object sender, RoutedEventArgs e) From 36c5dfb371f97fe4bec686fb6e616793e2622067 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Fri, 28 Feb 2025 15:23:30 +0100 Subject: [PATCH 5/9] Improvements to package detection --- src/UniGetUI.Core.Tools/Tools.cs | 2 +- .../Packages/Classes/PackageCacher.cs | 11 +++++++++++ src/UniGetUI/Controls/PackageRanking.xaml.cs | 14 ++++++++------ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/UniGetUI.Core.Tools/Tools.cs b/src/UniGetUI.Core.Tools/Tools.cs index 0e479f491c..fb9dc2f10e 100644 --- a/src/UniGetUI.Core.Tools/Tools.cs +++ b/src/UniGetUI.Core.Tools/Tools.cs @@ -148,7 +148,7 @@ public static Tuple Which(string command, bool updateEnv = true) /// The formatted string public static string FormatAsName(string name, bool isWinget = false) { - if (isWinget) name = string.Join('.', name.Split('.')[1..]); + if (isWinget) name = string.Join(' ', name.Split('.')[1..]); name = name.Replace(".install", "").Replace(".portable", "").Replace("-", " ").Replace("_", " ").Split("/")[^1] .Split(":")[0]; diff --git a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs index b864f68ae7..713c842c02 100644 --- a/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs +++ b/src/UniGetUI.PackageEngine.PackageManagerClasses/Packages/Classes/PackageCacher.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using UniGetUI.PackageEngine.Interfaces; using UniGetUI.PackageEngine.PackageClasses; namespace UniGetUI.PackageEngine.Classes.Packages @@ -116,5 +117,15 @@ private static void AddPackageToCache(Package package, ConcurrentDictionary(response); - foreach (var item in rankings.popular[0..4]) + foreach (var item in rankings.popular[0..5]) { PopularRank.Add(new(item)); } - foreach (var item in rankings.installed[0..4]) + foreach (var item in rankings.installed[0..5]) { InstalledRank.Add(new(item)); } - foreach (var item in rankings.uninstalled[0..4]) + foreach (var item in rankings.uninstalled[0..5]) { WallOfShame.Add(new(item)); } @@ -125,7 +125,7 @@ public class PackageRankingItem: INotifyPropertyChanged private string id; private string manager; private string source; - private Package? package; + private IPackage package; public event PropertyChangedEventHandler? PropertyChanged; @@ -162,7 +162,7 @@ public async void LoadIcon() } } - public Package? GetPackage() + public IPackage GetPackage() { IPackageManager? _manager = null; foreach (var candidate in PEInterface.Managers) @@ -186,7 +186,9 @@ public async void LoadIcon() if (_source is null) _source = _manager.DefaultSource; - return new Package(CoreTools.FormatAsName(id, isWinget: source == "winget"), id, "latest", _source, _manager, new()); + var package = new Package(CoreTools.FormatAsName(id, isWinget: source == "winget"), id, "latest", _source, _manager, new()); + + return PackageCacher.GetExistingOne(package) ?? package; } public void ShowDetails() From 5c073453b49b2ed93e69030b129529c00967c87b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Fri, 28 Feb 2025 15:30:35 +0100 Subject: [PATCH 6/9] Load only when needed --- .../SoftwarePages/AbstractPackagesPage.xaml.cs | 2 +- .../Pages/SoftwarePages/DiscoverSoftwarePage.cs | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs index c85d969fec..4fd0a33119 100644 --- a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs +++ b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml.cs @@ -1058,7 +1058,7 @@ private async Task LoadIconsForNewPackages() FilterPackages(); } - public void OnEnter() + public virtual void OnEnter() { Visibility = Visibility.Visible; IsEnabled = true; diff --git a/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs b/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs index 6af392e3c1..d2da2865f9 100644 --- a/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs +++ b/src/UniGetUI/Pages/SoftwarePages/DiscoverSoftwarePage.cs @@ -42,8 +42,8 @@ public DiscoverSoftwarePage() NoMatches_BackgroundText = CoreTools.Translate("No results were found matching the input criteria"), PageTitle = CoreTools.Translate("Discover Packages"), - Glyph = "\uF6FA" - }) + Glyph = "\uF6FA" + }) { InstantSearchCheckbox.IsEnabled = false; InstantSearchCheckbox.Visibility = Visibility.Collapsed; @@ -55,7 +55,6 @@ public DiscoverSoftwarePage() MegaQueryBlock.KeyUp += (s, e) => { if (e.Key == VirtualKey.Enter) { Event_SearchPackages(s, e); } }; RankingControl.Visibility = Visibility.Visible; - _ = RankingControl.Reload(); } public override BetterMenu GenerateContextMenu() @@ -138,6 +137,17 @@ public override BetterMenu GenerateContextMenu() return menu; } + bool rankingsLoaded; + public override void OnEnter() + { + base.OnEnter(); + if (!rankingsLoaded) + { + _ = RankingControl.Reload(); + rankingsLoaded = true; + } + } + public override void GenerateToolBar() { AppBarButton InstallSelected = new(); From 3240dfb93e647b54f662eac3dc93887ba0e664d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Fri, 28 Feb 2025 15:39:04 +0100 Subject: [PATCH 7/9] Layout improvements --- src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml index 94c9c4c6c6..d9bef6fe55 100644 --- a/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml +++ b/src/UniGetUI/Pages/SoftwarePages/AbstractPackagesPage.xaml @@ -938,7 +938,7 @@ - + @@ -959,7 +959,9 @@ - + + + From ba9185e67cfdd615113a930ece2d82e1e3aadd9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Fri, 28 Feb 2025 16:43:05 +0100 Subject: [PATCH 8/9] Minor layout improvements --- src/Directory.Build.props | 2 +- src/UniGetUI/Controls/PackageRanking.xaml.cs | 2 +- src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 4042d5859b..11b582e637 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ enable 10.0.19041.0 - 10.0.26100.56 + 10.0.26100.57 8.0.405 Martí Climent and the contributors Martí Climent diff --git a/src/UniGetUI/Controls/PackageRanking.xaml.cs b/src/UniGetUI/Controls/PackageRanking.xaml.cs index 6f4c111ca4..d42d74d467 100644 --- a/src/UniGetUI/Controls/PackageRanking.xaml.cs +++ b/src/UniGetUI/Controls/PackageRanking.xaml.cs @@ -56,7 +56,7 @@ public PackagesRanking() link.Inlines.Add(new Run() { Text = CoreTools.Translate("More info") }); (InstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(link); - (UninstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(new Run { Text = CoreTools.Translate("Packages that have been uninstalled the most times through UniGetUI.") + " " }); + (UninstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(new Run { Text = CoreTools.Translate("The packages that have been uninstalled most times through UniGetUI.") + " " }); link = new Hyperlink { NavigateUri = new Uri("about:blank") }; link.Inlines.Add(new Run() { Text = CoreTools.Translate("More info") }); (UninstalledDescription.Blocks[0] as Paragraph)?.Inlines.Add(link); diff --git a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs index e4705ecf33..0ea527ae7c 100644 --- a/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs +++ b/src/UniGetUI/Pages/DialogPages/DialogHelper_Generic.cs @@ -579,8 +579,8 @@ public static void ShowTelemetryBanner() { Padding = new Thickness(0), Content = btns, - Background = new SolidColorBrush(Colors.Transparent), - BorderBrush = new SolidColorBrush(Colors.Transparent), + Background = new SolidColorBrush(Microsoft.UI.Colors.Transparent), + BorderBrush = new SolidColorBrush(Microsoft.UI.Colors.Transparent), }; mainButton.Resources["HyperlinkButtonBackgroundPointerOver"] = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)); From 69fa284605fdd5cb9cfe198007c13229ea170f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mart=C3=AD=20Climent?= Date: Fri, 28 Feb 2025 16:45:14 +0100 Subject: [PATCH 9/9] minor layout improvements --- src/UniGetUI/Controls/PackageRanking.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/UniGetUI/Controls/PackageRanking.xaml b/src/UniGetUI/Controls/PackageRanking.xaml index 99f6ce9866..470273b53c 100644 --- a/src/UniGetUI/Controls/PackageRanking.xaml +++ b/src/UniGetUI/Controls/PackageRanking.xaml @@ -18,7 +18,7 @@ - +