diff --git a/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs b/Blish HUD/GameServices/Modules/UI/Presenters/ManagePkgPresenter.cs index 40d9820c..aa37afbc 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 133bd38a..972269f1 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 4c36d10d..84fe8b2f 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)); }