From d7bfa2147f7bdd1ae0642ee0e826efd61c8486c1 Mon Sep 17 00:00:00 2001 From: rootdarkarchon Date: Wed, 18 Oct 2023 17:49:24 +0200 Subject: [PATCH] fix token for character change, add online count to syncshells and groups --- MareSynchronos/UI/CompactUI.cs | 4 +- .../UI/Components/DrawFolderBase.cs | 1 + .../UI/Components/DrawFolderGroup.cs | 14 +++++- MareSynchronos/UI/Components/DrawFolderTag.cs | 44 ++++++++++++++----- .../UI/Components/DrawGroupedGroupFolder.cs | 7 +++ MareSynchronos/UI/Components/IDrawFolder.cs | 1 + .../WebAPI/SignalR/TokenProvider.cs | 11 ++++- 7 files changed, 64 insertions(+), 18 deletions(-) diff --git a/MareSynchronos/UI/CompactUI.cs b/MareSynchronos/UI/CompactUI.cs index ebcef03..23e4c2e 100644 --- a/MareSynchronos/UI/CompactUI.cs +++ b/MareSynchronos/UI/CompactUI.cs @@ -91,8 +91,8 @@ public class CompactUi : WindowMediatorSubscriberBase SizeConstraints = new WindowSizeConstraints() { - MinimumSize = new Vector2(350, 400), - MaximumSize = new Vector2(350, 2000), + MinimumSize = new Vector2(375, 400), + MaximumSize = new Vector2(375, 2000), }; } diff --git a/MareSynchronos/UI/Components/DrawFolderBase.cs b/MareSynchronos/UI/Components/DrawFolderBase.cs index 7c505a8..475fa3f 100644 --- a/MareSynchronos/UI/Components/DrawFolderBase.cs +++ b/MareSynchronos/UI/Components/DrawFolderBase.cs @@ -12,6 +12,7 @@ public abstract class DrawFolderBase : IDrawFolder protected readonly string _id; protected readonly TagHandler _tagHandler; private float _menuWidth = -1; + public int OnlinePairs => _drawPairs.Count(u => u.Pair.IsOnline); protected DrawFolderBase(string id, IEnumerable drawPairs, TagHandler tagHandler) { _id = id; diff --git a/MareSynchronos/UI/Components/DrawFolderGroup.cs b/MareSynchronos/UI/Components/DrawFolderGroup.cs index c77dc3b..0c7e45c 100644 --- a/MareSynchronos/UI/Components/DrawFolderGroup.cs +++ b/MareSynchronos/UI/Components/DrawFolderGroup.cs @@ -39,16 +39,26 @@ public class DrawFolderGroup : DrawFolderBase protected override float DrawIcon(float textPosY, float originalY) { ImGui.SetCursorPosY(textPosY); + using (ImRaii.PushFont(UiBuilder.IconFont)) ImGui.TextUnformatted(_groupFullInfoDto.GroupPermissions.IsDisableInvites() ? FontAwesomeIcon.Lock.ToIconString() : FontAwesomeIcon.Users.ToIconString()); if (_groupFullInfoDto.GroupPermissions.IsDisableInvites()) { UiSharedService.AttachToolTip("Syncshell " + _groupFullInfoDto.GroupAliasOrGID + " is closed for invites"); } - if (IsOwner) + + using (ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, ImGui.GetStyle().ItemSpacing with { X = ImGui.GetStyle().ItemSpacing.X / 2f })) { ImGui.SameLine(); ImGui.SetCursorPosY(textPosY); + ImGui.TextUnformatted("[" + OnlinePairs.ToString() + "]"); + } + UiSharedService.AttachToolTip(OnlinePairs + " online in this syncshell"); + + ImGui.SameLine(); + if (IsOwner) + { + ImGui.SameLine(); using (ImRaii.PushFont(UiBuilder.IconFont)) ImGui.TextUnformatted(FontAwesomeIcon.Crown.ToIconString()); UiSharedService.AttachToolTip("You are the owner of " + _groupFullInfoDto.GroupAliasOrGID); @@ -136,7 +146,7 @@ public class DrawFolderGroup : DrawFolderBase ImGui.CloseCurrentPopup(); } - if (UiSharedService.IconTextButton(disableVfx ? FontAwesomeIcon.Sun : FontAwesomeIcon.Circle, disableVfx ? "Enable VFX Sync" : "Disable VFX Sync", + if (UiSharedService.IconTextButton(disableVfx ? FontAwesomeIcon.Sun : FontAwesomeIcon.Circle, disableVfx ? "Enable VFX Sync" : "Disable VFX Sync", menuWidth, true)) { perm.SetDisableVFX(!disableVfx); diff --git a/MareSynchronos/UI/Components/DrawFolderTag.cs b/MareSynchronos/UI/Components/DrawFolderTag.cs index a61cdca..a71c472 100644 --- a/MareSynchronos/UI/Components/DrawFolderTag.cs +++ b/MareSynchronos/UI/Components/DrawFolderTag.cs @@ -53,22 +53,42 @@ public class DrawFolderTag : DrawFolderBase _ => true, } && _drawPairs.Any(); + private bool RenderCount => _id switch + { + TagHandler.CustomOfflineSyncshellTag => false, + TagHandler.CustomOfflineTag => false, + TagHandler.CustomUnpairedTag => false, + _ => true + }; + protected override float DrawIcon(float textPosY, float originalY) { - using var font = ImRaii.PushFont(UiBuilder.IconFont); - var icon = _id switch + using (ImRaii.PushFont(UiBuilder.IconFont)) { - TagHandler.CustomUnpairedTag => FontAwesomeIcon.ArrowsLeftRight.ToIconString(), - TagHandler.CustomOnlineTag => FontAwesomeIcon.Link.ToIconString(), - TagHandler.CustomOfflineTag => FontAwesomeIcon.Unlink.ToIconString(), - TagHandler.CustomOfflineSyncshellTag => FontAwesomeIcon.Unlink.ToIconString(), - TagHandler.CustomVisibleTag => FontAwesomeIcon.Eye.ToIconString(), - TagHandler.CustomAllTag => FontAwesomeIcon.User.ToIconString(), - _ => FontAwesomeIcon.Folder.ToIconString() - }; + var icon = _id switch + { + TagHandler.CustomUnpairedTag => FontAwesomeIcon.ArrowsLeftRight.ToIconString(), + TagHandler.CustomOnlineTag => FontAwesomeIcon.Link.ToIconString(), + TagHandler.CustomOfflineTag => FontAwesomeIcon.Unlink.ToIconString(), + TagHandler.CustomOfflineSyncshellTag => FontAwesomeIcon.Unlink.ToIconString(), + TagHandler.CustomVisibleTag => FontAwesomeIcon.Eye.ToIconString(), + TagHandler.CustomAllTag => FontAwesomeIcon.User.ToIconString(), + _ => FontAwesomeIcon.Folder.ToIconString() + }; - ImGui.SetCursorPosY(textPosY); - ImGui.TextUnformatted(icon); + ImGui.SetCursorPosY(textPosY); + ImGui.TextUnformatted(icon); + } + if (RenderCount) + { + using (ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, ImGui.GetStyle().ItemSpacing with { X = ImGui.GetStyle().ItemSpacing.X / 2f })) + { + ImGui.SameLine(); + ImGui.SetCursorPosY(textPosY); + ImGui.TextUnformatted("[" + OnlinePairs.ToString() + "]"); + } + UiSharedService.AttachToolTip(OnlinePairs + " online in this group"); + } ImGui.SameLine(); return ImGui.GetCursorPosX(); } diff --git a/MareSynchronos/UI/Components/DrawGroupedGroupFolder.cs b/MareSynchronos/UI/Components/DrawGroupedGroupFolder.cs index ee4432a..d1c3e74 100644 --- a/MareSynchronos/UI/Components/DrawGroupedGroupFolder.cs +++ b/MareSynchronos/UI/Components/DrawGroupedGroupFolder.cs @@ -9,6 +9,7 @@ public class DrawGroupedGroupFolder : IDrawFolder { private readonly IEnumerable _groups; private readonly TagHandler _tagHandler; + public int OnlinePairs => _groups.Sum(g => g.OnlinePairs); public DrawGroupedGroupFolder(IEnumerable groups, TagHandler tagHandler) { @@ -33,6 +34,12 @@ public class DrawGroupedGroupFolder : IDrawFolder ImGui.SameLine(); using (ImRaii.PushFont(UiBuilder.IconFont)) ImGui.TextUnformatted(FontAwesomeIcon.UsersRectangle.ToIconString()); + using (ImRaii.PushStyle(ImGuiStyleVar.ItemSpacing, ImGui.GetStyle().ItemSpacing with { X = ImGui.GetStyle().ItemSpacing.X / 2f })) + { + ImGui.SameLine(); + ImGui.TextUnformatted("[" + OnlinePairs.ToString() + "]"); + } + UiSharedService.AttachToolTip(OnlinePairs + " online all of your syncshells"); ImGui.SameLine(); ImGui.TextUnformatted("All Syncshells"); ImGui.Separator(); diff --git a/MareSynchronos/UI/Components/IDrawFolder.cs b/MareSynchronos/UI/Components/IDrawFolder.cs index ead3bb2..78fceb5 100644 --- a/MareSynchronos/UI/Components/IDrawFolder.cs +++ b/MareSynchronos/UI/Components/IDrawFolder.cs @@ -2,5 +2,6 @@ public interface IDrawFolder { + int OnlinePairs { get; } void Draw(); } diff --git a/MareSynchronos/WebAPI/SignalR/TokenProvider.cs b/MareSynchronos/WebAPI/SignalR/TokenProvider.cs index 5940979..2d0f6e8 100644 --- a/MareSynchronos/WebAPI/SignalR/TokenProvider.cs +++ b/MareSynchronos/WebAPI/SignalR/TokenProvider.cs @@ -1,5 +1,6 @@ using MareSynchronos.API.Routes; using MareSynchronos.Services; +using MareSynchronos.Services.Mediator; using MareSynchronos.Services.ServerConfiguration; using MareSynchronos.Utils; using Microsoft.Extensions.Logging; @@ -10,7 +11,7 @@ using System.Reflection; namespace MareSynchronos.WebAPI.SignalR; -public sealed class TokenProvider : IDisposable +public sealed class TokenProvider : IDisposable, IMediatorSubscriber { private readonly DalamudUtilService _dalamudUtil; private readonly HttpClient _httpClient; @@ -18,20 +19,26 @@ public sealed class TokenProvider : IDisposable private readonly ServerConfigurationManager _serverManager; private readonly ConcurrentDictionary _tokenCache = new(); - public TokenProvider(ILogger logger, ServerConfigurationManager serverManager, DalamudUtilService dalamudUtil) + public TokenProvider(ILogger logger, ServerConfigurationManager serverManager, DalamudUtilService dalamudUtil, MareMediator mareMediator) { _logger = logger; _serverManager = serverManager; _dalamudUtil = dalamudUtil; _httpClient = new(); var ver = Assembly.GetExecutingAssembly().GetName().Version; + Mediator = mareMediator; + Mediator.Subscribe(this, (_) => _tokenCache.Clear()); + Mediator.Subscribe(this, (_) => _tokenCache.Clear()); _httpClient.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("MareSynchronos", ver!.Major + "." + ver!.Minor + "." + ver!.Build)); } + public MareMediator Mediator { get; } + private JwtIdentifier CurrentIdentifier => new(_serverManager.CurrentApiUrl, _serverManager.GetSecretKey()!); public void Dispose() { + Mediator.UnsubscribeAll(this); _httpClient.Dispose(); }