From a9c4c002eb9aa6dac53eef9c2bf120f288dacfa3 Mon Sep 17 00:00:00 2001 From: Tharylia <41393569+Tharylia@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:05:37 +0200 Subject: [PATCH 1/2] Order repo view by available updates and latest module name --- .../UI/Presenters/ManagePkgPresenter.cs | 6 +++--- .../UI/Presenters/ModuleRepoPresenter.cs | 18 +++++++++++++++++- .../Modules/UI/Views/ManagePkgView.cs | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs b/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs index 40d9820c5..aa37afbcb 100644 --- a/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs +++ b/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs @@ -7,7 +7,7 @@ using Version = SemVer.Version; namespace Blish_HUD.Modules.UI.Presenters { - public class ManagePkgPresenter : Presenter> { + public class ManagePkgPresenter : Presenter> { private ModuleManager _existingModule; @@ -15,10 +15,10 @@ public class ManagePkgPresenter : Presenter model) : base(view, model) { /* NOOP */ } + public ManagePkgPresenter(ManagePkgView view, IOrderedEnumerable model) : base(view, model) { /* NOOP */ } protected override Task Load(IProgress progress) { - _existingModule = GameService.Module.Modules.FirstOrDefault(m => m.Manifest.Namespace == this.Model.Key); + _existingModule = GameService.Module.Modules.FirstOrDefault(m => m.Manifest.Namespace == this.Model.LastOrDefault()?.Namespace); return base.Load(progress); } diff --git a/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs b/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs index 133bd38a3..972269f1c 100644 --- a/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs +++ b/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs @@ -59,6 +59,15 @@ private void UpdateExtraOptionsView() { } } + /// + /// Gets the currently installed module version. + /// + /// The namespace of the module to get the installed version of. + /// The currently installed module version or null if module is not installed. + private SemVer.Version GetCurrentModuleVersion(string moduleNamespace) { + return GameService.Module.Modules.FirstOrDefault(m => m.Manifest.Namespace == moduleNamespace)?.Manifest?.Version; + } + private void UpdatePackagesView() { this.View.RepoFlowPanel.ClearChildren(); @@ -67,7 +76,14 @@ private void UpdatePackagesView() { foreach (var pkgManifest in this.Model.GetPkgManifests() .Where(m => GameService.Overlay.ShowPreviews.Value || !m.IsPreview) .GroupBy(m => m.Namespace) - .OrderBy(pkg => pkg.First().Name)) { + .Select(pkgs => pkgs.OrderBy(x => x.Version)) + .OrderByDescending(pkgs => { + var lastManifest = pkgs.Last(); + var latestInstalledVersion = this.GetCurrentModuleVersion(lastManifest.Namespace); + var needsUpdate = latestInstalledVersion != null && latestInstalledVersion < lastManifest.Version; + return needsUpdate; + }) // Modules with update at top + .ThenBy(pkgs => pkgs.Last().Name)) { var nPanel = new ViewContainer { Size = new Point(this.View.RepoFlowPanel.Width - 25, 64), ShowTint = (s = !s), diff --git a/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs b/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs index 4c36d10d4..84fe8b2fd 100644 --- a/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs +++ b/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs @@ -158,7 +158,7 @@ public PkgVersionRelationship VersionRelationship { public ManagePkgView() { /* NOOP */ } - public ManagePkgView(IGrouping model) { + public ManagePkgView(IOrderedEnumerable model) { this.WithPresenter(new ManagePkgPresenter(this, model)); } From 3a4b6b9226e647dfb07f9828dbd8638c15f5b294 Mon Sep 17 00:00:00 2001 From: Tharylia <41393569+Tharylia@users.noreply.github.com> Date: Wed, 25 Sep 2024 12:05:37 +0200 Subject: [PATCH 2/2] #826 Order repo view by available updates and latest module name --- .../UI/Presenters/ManagePkgPresenter.cs | 6 +++--- .../UI/Presenters/ModuleRepoPresenter.cs | 18 +++++++++++++++++- .../Modules/UI/Views/ManagePkgView.cs | 2 +- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs b/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs index 40d9820c5..aa37afbcb 100644 --- a/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs +++ b/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs @@ -7,7 +7,7 @@ using Version = SemVer.Version; namespace Blish_HUD.Modules.UI.Presenters { - public class ManagePkgPresenter : Presenter> { + public class ManagePkgPresenter : Presenter> { private ModuleManager _existingModule; @@ -15,10 +15,10 @@ public class ManagePkgPresenter : Presenter model) : base(view, model) { /* NOOP */ } + public ManagePkgPresenter(ManagePkgView view, IOrderedEnumerable model) : base(view, model) { /* NOOP */ } protected override Task Load(IProgress progress) { - _existingModule = GameService.Module.Modules.FirstOrDefault(m => m.Manifest.Namespace == this.Model.Key); + _existingModule = GameService.Module.Modules.FirstOrDefault(m => m.Manifest.Namespace == this.Model.LastOrDefault()?.Namespace); return base.Load(progress); } diff --git a/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs b/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs index 133bd38a3..972269f1c 100644 --- a/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs +++ b/Blish HUD/GameServices/Modules/UI/Presenters/ModuleRepoPresenter.cs @@ -59,6 +59,15 @@ private void UpdateExtraOptionsView() { } } + /// + /// Gets the currently installed module version. + /// + /// The namespace of the module to get the installed version of. + /// The currently installed module version or null if module is not installed. + private SemVer.Version GetCurrentModuleVersion(string moduleNamespace) { + return GameService.Module.Modules.FirstOrDefault(m => m.Manifest.Namespace == moduleNamespace)?.Manifest?.Version; + } + private void UpdatePackagesView() { this.View.RepoFlowPanel.ClearChildren(); @@ -67,7 +76,14 @@ private void UpdatePackagesView() { foreach (var pkgManifest in this.Model.GetPkgManifests() .Where(m => GameService.Overlay.ShowPreviews.Value || !m.IsPreview) .GroupBy(m => m.Namespace) - .OrderBy(pkg => pkg.First().Name)) { + .Select(pkgs => pkgs.OrderBy(x => x.Version)) + .OrderByDescending(pkgs => { + var lastManifest = pkgs.Last(); + var latestInstalledVersion = this.GetCurrentModuleVersion(lastManifest.Namespace); + var needsUpdate = latestInstalledVersion != null && latestInstalledVersion < lastManifest.Version; + return needsUpdate; + }) // Modules with update at top + .ThenBy(pkgs => pkgs.Last().Name)) { var nPanel = new ViewContainer { Size = new Point(this.View.RepoFlowPanel.Width - 25, 64), ShowTint = (s = !s), diff --git a/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs b/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs index 4c36d10d4..84fe8b2fd 100644 --- a/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs +++ b/Blish HUD/GameServices/Modules/UI/Views/ManagePkgView.cs @@ -158,7 +158,7 @@ public PkgVersionRelationship VersionRelationship { public ManagePkgView() { /* NOOP */ } - public ManagePkgView(IGrouping model) { + public ManagePkgView(IOrderedEnumerable model) { this.WithPresenter(new ManagePkgPresenter(this, model)); }