improve ui performance, don't show other side paused pairs in online list

This commit is contained in:
Stanley Dimant
2023-02-07 09:28:52 +01:00
parent 37b8c0d1db
commit aab458066c
2 changed files with 44 additions and 33 deletions

View File

@@ -530,22 +530,23 @@ public class CompactUi : WindowMediatorSubscriberBase, IDisposable
var ySize = TransferPartHeight == 0 var ySize = TransferPartHeight == 0
? 1 ? 1
: (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y) - TransferPartHeight - ImGui.GetCursorPosY(); : (ImGui.GetWindowContentRegionMax().Y - ImGui.GetWindowContentRegionMin().Y) - TransferPartHeight - ImGui.GetCursorPosY();
var users = GetFilteredUsers(); var users = GetFilteredUsers()
.OrderBy(
ImGui.BeginChild("list", new Vector2(WindowContentWidth, ySize), border: false); u => _configService.Current.ShowCharacterNameInsteadOfNotesForVisible && !string.IsNullOrEmpty(u.PlayerName)
var visibleUsers = users.Where(u => u.IsVisible && u.UserPair!.OtherPermissions.IsPaired()).OrderBy(u => _configService.Current.ShowCharacterNameInsteadOfNotesForVisible ? ? u.PlayerName
u.PlayerName : (u.GetNote() ?? u.UserData.AliasOrUID), StringComparer.OrdinalIgnoreCase).ToList(); : (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();
if (_configService.Current.ReverseUserSort) if (_configService.Current.ReverseUserSort)
{ {
visibleUsers.Reverse(); users.Reverse();
onlineUsers.Reverse();
offlineUsers.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); _pairGroupsUi.Draw(visibleUsers, onlineUsers, offlineUsers);
ImGui.EndChild(); ImGui.EndChild();
@@ -557,7 +558,8 @@ public class CompactUi : WindowMediatorSubscriberBase, IDisposable
{ {
if (_characterOrCommentFilter.IsNullOrEmpty()) return true; if (_characterOrCommentFilter.IsNullOrEmpty()) return true;
return p.UserData.AliasOrUID.Contains(_characterOrCommentFilter, StringComparison.OrdinalIgnoreCase) || 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(); }).ToList();
} }

View File

@@ -14,13 +14,14 @@ using MareSynchronos.Localization;
using MareSynchronos.Managers; using MareSynchronos.Managers;
using MareSynchronos.MareConfiguration; using MareSynchronos.MareConfiguration;
using MareSynchronos.MareConfiguration.Models; using MareSynchronos.MareConfiguration.Models;
using MareSynchronos.Mediator;
using MareSynchronos.Models; using MareSynchronos.Models;
using MareSynchronos.Utils; using MareSynchronos.Utils;
using MareSynchronos.WebAPI; using MareSynchronos.WebAPI;
namespace MareSynchronos.UI; namespace MareSynchronos.UI;
public partial class UiShared : IDisposable public partial class UiShared : MediatorSubscriberBase
{ {
[LibraryImport("user32")] [LibraryImport("user32")]
internal static partial short GetKeyState(int nVirtKey); internal static partial short GetKeyState(int nVirtKey);
@@ -52,10 +53,15 @@ public partial class UiShared : IDisposable
ImGuiWindowFlags.NoScrollWithMouse; ImGuiWindowFlags.NoScrollWithMouse;
public ApiController ApiController => _apiController; 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, public UiShared(IpcManager ipcManager, ApiController apiController, PeriodicFileScanner cacheScanner, FileDialogManager fileDialogManager,
MareConfigService configService, DalamudUtil dalamudUtil, DalamudPluginInterface pluginInterface, Dalamud.Localization localization, MareConfigService configService, DalamudUtil dalamudUtil, DalamudPluginInterface pluginInterface, Dalamud.Localization localization,
ServerConfigurationManager serverManager) ServerConfigurationManager serverManager, MareMediator mediator) : base(mediator)
{ {
_ipcManager = ipcManager; _ipcManager = ipcManager;
_apiController = apiController; _apiController = apiController;
@@ -70,6 +76,15 @@ public partial class UiShared : IDisposable
_pluginInterface.UiBuilder.BuildFonts += BuildFont; _pluginInterface.UiBuilder.BuildFonts += BuildFont;
_pluginInterface.UiBuilder.RebuildFonts(); _pluginInterface.UiBuilder.RebuildFonts();
Mediator.Subscribe<DelayedFrameworkUpdateMessage>(this, (_) =>
{
_penumbraExists = _ipcManager.CheckPenumbraApi();
_glamourerExists = ipcManager.CheckGlamourerApi();
_customizePlusExists = _ipcManager.CheckCustomizePlusApi();
_heelsExists = _ipcManager.CheckHeelsApi();
_palettePlusExists = _ipcManager.CheckPalettePlusApi();
});
} }
public static float GetWindowContentRegionWidth() public static float GetWindowContentRegionWidth()
@@ -162,39 +177,33 @@ public partial class UiShared : IDisposable
public bool DrawOtherPluginState() public bool DrawOtherPluginState()
{ {
var penumbraExists = _ipcManager.CheckPenumbraApi(); var penumbraColor = _penumbraExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var glamourerExists = _ipcManager.CheckGlamourerApi(); var glamourerColor = _glamourerExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var heelsExists = _ipcManager.CheckHeelsApi(); var heelsColor = _heelsExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var customizeExists = _ipcManager.CheckCustomizePlusApi(); var customizeColor = _customizePlusExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var paletteExists = _ipcManager.CheckPalettePlusApi(); var paletteColor = _palettePlusExists ? 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 = customizeExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
var paletteColor = paletteExists ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed;
ImGui.Text("Penumbra:"); ImGui.Text("Penumbra:");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(penumbraColor, penumbraExists ? "Available" : "Unavailable"); ImGui.TextColored(penumbraColor, _penumbraExists ? "Available" : "Unavailable");
ImGui.SameLine(); ImGui.SameLine();
ImGui.Text("Glamourer:"); ImGui.Text("Glamourer:");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(glamourerColor, glamourerExists ? "Available" : "Unavailable"); ImGui.TextColored(glamourerColor, _glamourerExists ? "Available" : "Unavailable");
ImGui.Text("Optional Addons"); ImGui.Text("Optional Addons");
ImGui.SameLine(); ImGui.SameLine();
ImGui.Text("Heels:"); ImGui.Text("Heels:");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(heelsColor, heelsExists ? "Available" : "Unavailable"); ImGui.TextColored(heelsColor, _heelsExists ? "Available" : "Unavailable");
ImGui.SameLine(); ImGui.SameLine();
ImGui.Text("Customize+:"); ImGui.Text("Customize+:");
ImGui.SameLine(); ImGui.SameLine();
ImGui.TextColored(customizeColor, customizeExists ? "Available" : "Unavailable"); ImGui.TextColored(customizeColor, _customizePlusExists ? "Available" : "Unavailable");
ImGui.SameLine(); ImGui.SameLine();
ImGui.Text("Palette+:"); ImGui.Text("Palette+:");
ImGui.SameLine(); 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."); ImGui.TextColored(ImGuiColors.DalamudRed, "You need to install both Penumbra and Glamourer and keep them up to date to use Mare Synchronos.");
return false; return false;
@@ -653,9 +662,9 @@ public partial class UiShared : IDisposable
return true; return true;
} }
public void Dispose() public override void Dispose()
{ {
Logger.Verbose($"Disposing {GetType()}"); base.Dispose();
_pluginInterface.UiBuilder.BuildFonts -= BuildFont; _pluginInterface.UiBuilder.BuildFonts -= BuildFont;
} }
} }