From aab458066c5163463f7bd4ce488d93bc1091736e Mon Sep 17 00:00:00 2001 From: Stanley Dimant Date: Tue, 7 Feb 2023 09:28:52 +0100 Subject: [PATCH] improve ui performance, don't show other side paused pairs in online list --- MareSynchronos/UI/CompactUI.cs | 26 +++++++++-------- MareSynchronos/UI/UIShared.cs | 51 ++++++++++++++++++++-------------- 2 files changed, 44 insertions(+), 33 deletions(-) diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index 6f8416c..ced41ba 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -530,22 +530,23 @@ public class CompactUi : WindowMediatorSubscriberBase, IDisposable var ySize = TransferPartHeight == 0 ? 1 : (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y) - TransferPartHeight - ImGui.GetCursorPosY(); - var users = GetFilteredUsers(); - - ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false); - var visibleUsers = users.Where(u => u.IsVisible && u.UserPair!.OtherPermissions.IsPaired()).OrderBy(u => _configService.Current.ShowCharacterNameInsteadOfNotesForVisible ? - u.PlayerName : (u.GetNote() ?? u.UserData.AliasOrUID), StringComparer.OrdinalIgnoreCase).ToList(); - var onlineUsers = users.Where(u => u.IsOnline || (u.UserPair.OwnPermissions.IsPaused() || u.UserPair.OtherPermissions.IsPaused())).OrderBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase).ToList(); - var offlineUsers = users.Where(u => (!u.IsOnline && !u.IsVisible || !u.UserPair!.OtherPermissions.IsPaired()) && !(u.UserPair.OwnPermissions.IsPaused() || u.UserPair.OtherPermissions.IsPaused())) - .OrderBy(u => u.GetNote() ?? u.UserData.AliasOrUID, StringComparer.OrdinalIgnoreCase).ToList(); + var users = GetFilteredUsers() + .OrderBy( + u => _configService.Current.ShowCharacterNameInsteadOfNotesForVisible && !string.IsNullOrEmpty(u.PlayerName) + ? u.PlayerName + : (u.GetNote() ?? u.UserData.AliasOrUID), StringComparer.OrdinalIgnoreCase).ToList(); if (_configService.Current.ReverseUserSort) { - visibleUsers.Reverse(); - onlineUsers.Reverse(); - offlineUsers.Reverse(); + users.Reverse(); } + var onlineUsers = users.Where(u => u.IsOnline || u.UserPair.OwnPermissions.IsPaused()).ToList(); + var visibleUsers = onlineUsers.Where(u => u.IsVisible).ToList(); + var offlineUsers = users.Except(onlineUsers).ToList(); + + ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false); + _pairGroupsUi.Draw(visibleUsers, onlineUsers, offlineUsers); ImGui.EndChild(); @@ -557,7 +558,8 @@ public class CompactUi : WindowMediatorSubscriberBase, IDisposable { if (_characterOrCommentFilter.IsNullOrEmpty()) return true; return p.UserData.AliasOrUID.Contains(_characterOrCommentFilter, StringComparison.OrdinalIgnoreCase) || - (p.GetNote()?.Contains(_characterOrCommentFilter, StringComparison.OrdinalIgnoreCase) ?? false); + (p.GetNote()?.Contains(_characterOrCommentFilter, StringComparison.OrdinalIgnoreCase) ?? false) || + (p.PlayerName?.Contains(_characterOrCommentFilter) ?? false); }).ToList(); } diff --git a/MareSynchronos/UI/UIShared.cs b/MareSynchronos/UI/UIShared.cs index f6fbcf4..3bd6bbc 100644 --- a/MareSynchronos/UI/UIShared.cs +++ b/MareSynchronos/UI/UIShared.cs @@ -14,13 +14,14 @@ using MareSynchronos.Localization; using MareSynchronos.Managers; using MareSynchronos.MareConfiguration; using MareSynchronos.MareConfiguration.Models; +using MareSynchronos.Mediator; using MareSynchronos.Models; using MareSynchronos.Utils; using MareSynchronos.WebAPI; namespace MareSynchronos.UI; -public partial class UiShared : IDisposable +public partial class UiShared : MediatorSubscriberBase { [LibraryImport("user32")] internal static partial short GetKeyState(int nVirtKey); @@ -52,10 +53,15 @@ public partial class UiShared : IDisposable ImGuiWindowFlags.NoScrollWithMouse; public ApiController ApiController => _apiController; + private bool _penumbraExists = false; + private bool _glamourerExists = false; + private bool _customizePlusExists = false; + private bool _heelsExists = false; + private bool _palettePlusExists = false; public UiShared(IpcManager ipcManager, ApiController apiController, PeriodicFileScanner cacheScanner, FileDialogManager fileDialogManager, MareConfigService configService, DalamudUtil dalamudUtil, DalamudPluginInterface pluginInterface, Dalamud.Localization localization, - ServerConfigurationManager serverManager) + ServerConfigurationManager serverManager, MareMediator mediator) : base(mediator) { _ipcManager = ipcManager; _apiController = apiController; @@ -70,6 +76,15 @@ public partial class UiShared : IDisposable _pluginInterface.UiBuilder.BuildFonts += BuildFont; _pluginInterface.UiBuilder.RebuildFonts(); + + Mediator.Subscribe(this, (_) => + { + _penumbraExists = _ipcManager.CheckPenumbraApi(); + _glamourerExists = ipcManager.CheckGlamourerApi(); + _customizePlusExists = _ipcManager.CheckCustomizePlusApi(); + _heelsExists = _ipcManager.CheckHeelsApi(); + _palettePlusExists = _ipcManager.CheckPalettePlusApi(); + }); } public static float GetWindowContentRegionWidth() @@ -162,39 +177,33 @@ public partial class UiShared : IDisposable public bool DrawOtherPluginState() { - var penumbraExists = _ipcManager.CheckPenumbraApi(); - var glamourerExists = _ipcManager.CheckGlamourerApi(); - var heelsExists = _ipcManager.CheckHeelsApi(); - var customizeExists = _ipcManager.CheckCustomizePlusApi(); - var paletteExists = _ipcManager.CheckPalettePlusApi(); - - var penumbraColor = penumbraExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; - var glamourerColor = glamourerExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; - var heelsColor = heelsExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; - var customizeColor = customizeExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; - var paletteColor = paletteExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; + var penumbraColor = _penumbraExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; + var glamourerColor = _glamourerExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; + var heelsColor = _heelsExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; + var customizeColor = _customizePlusExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; + var paletteColor = _palettePlusExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed; ImGui.Text("Penumbra:"); ImGui.SameLine(); - ImGui.TextColored(penumbraColor, penumbraExists ? "Available" : "Unavailable"); + ImGui.TextColored(penumbraColor, _penumbraExists ? "Available" : "Unavailable"); ImGui.SameLine(); ImGui.Text("Glamourer:"); ImGui.SameLine(); - ImGui.TextColored(glamourerColor, glamourerExists ? "Available" : "Unavailable"); + ImGui.TextColored(glamourerColor, _glamourerExists ? "Available" : "Unavailable"); ImGui.Text("Optional Addons"); ImGui.SameLine(); ImGui.Text("Heels:"); ImGui.SameLine(); - ImGui.TextColored(heelsColor, heelsExists ? "Available" : "Unavailable"); + ImGui.TextColored(heelsColor, _heelsExists ? "Available" : "Unavailable"); ImGui.SameLine(); ImGui.Text("Customize+:"); ImGui.SameLine(); - ImGui.TextColored(customizeColor, customizeExists ? "Available" : "Unavailable"); + ImGui.TextColored(customizeColor, _customizePlusExists ? "Available" : "Unavailable"); ImGui.SameLine(); ImGui.Text("Palette+:"); ImGui.SameLine(); - ImGui.TextColored(paletteColor, paletteExists ? "Available" : "Unavailable"); + ImGui.TextColored(paletteColor, _palettePlusExists ? "Available" : "Unavailable"); - if (!penumbraExists || !glamourerExists) + if (!_penumbraExists || !_glamourerExists) { ImGui.TextColored(ImGuiColors.DalamudRed, "You need to install both Penumbra and Glamourer and keep them up to date to use Mare Synchronos."); return false; @@ -653,9 +662,9 @@ public partial class UiShared : IDisposable return true; } - public void Dispose() + public override void Dispose() { - Logger.Verbose($"Disposing {GetType()}"); + base.Dispose(); _pluginInterface.UiBuilder.BuildFonts -= BuildFont; } }