From b45c1a3ababa29bf55d753b8fca4b5d3ece1640d Mon Sep 17 00:00:00 2001 From: cake Date: Fri, 21 Nov 2025 04:32:53 +0100 Subject: [PATCH] Added refresh on leave of syncshell. --- LightlessSync/Services/Mediator/Messages.cs | 1 + LightlessSync/UI/Components/DrawFolderGroup.cs | 1 + LightlessSync/UI/SyncshellFinderUI.cs | 15 +++++++++------ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/LightlessSync/Services/Mediator/Messages.cs b/LightlessSync/Services/Mediator/Messages.cs index 79434c2..343075c 100644 --- a/LightlessSync/Services/Mediator/Messages.cs +++ b/LightlessSync/Services/Mediator/Messages.cs @@ -107,6 +107,7 @@ public record GPoseLobbyReceiveWorldData(UserData UserData, WorldData WorldData) public record OpenCharaDataHubWithFilterMessage(UserData UserData) : MessageBase; public record EnableBroadcastMessage(string HashedCid, bool Enabled) : MessageBase; public record BroadcastStatusChangedMessage(bool Enabled, TimeSpan? Ttl) : MessageBase; +public record UserLeftSyncshellReloadFinderUi(bool hasLeft, string gid) : MessageBase; public record SyncshellBroadcastsUpdatedMessage : MessageBase; public record PairRequestReceivedMessage(string HashedCid, string Message) : MessageBase; public record PairRequestsUpdatedMessage : MessageBase; diff --git a/LightlessSync/UI/Components/DrawFolderGroup.cs b/LightlessSync/UI/Components/DrawFolderGroup.cs index 6de9e28..ac146eb 100644 --- a/LightlessSync/UI/Components/DrawFolderGroup.cs +++ b/LightlessSync/UI/Components/DrawFolderGroup.cs @@ -111,6 +111,7 @@ public class DrawFolderGroup : DrawFolderBase if (_uiSharedService.IconTextButton(FontAwesomeIcon.ArrowCircleLeft, "Leave Syncshell", menuWidth, true) && UiSharedService.CtrlPressed()) { _ = _apiController.GroupLeave(_groupFullInfoDto); + _lightlessMediator.Publish(new UserLeftSyncshellReloadFinderUi(hasLeft: true, _groupFullInfoDto.GID)); ImGui.CloseCurrentPopup(); } UiSharedService.AttachToolTip("Hold CTRL and click to leave this Syncshell" + (!string.Equals(_groupFullInfoDto.OwnerUID, _apiController.UID, StringComparison.Ordinal) diff --git a/LightlessSync/UI/SyncshellFinderUI.cs b/LightlessSync/UI/SyncshellFinderUI.cs index f0076d6..70e1bf8 100644 --- a/LightlessSync/UI/SyncshellFinderUI.cs +++ b/LightlessSync/UI/SyncshellFinderUI.cs @@ -14,6 +14,7 @@ using LightlessSync.Services.Mediator; using LightlessSync.Utils; using LightlessSync.WebAPI; using Microsoft.Extensions.Logging; +using System.Collections.Specialized; using System.Numerics; namespace LightlessSync.UI; @@ -67,6 +68,7 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase Mediator.Subscribe(this, async _ => await RefreshSyncshellsAsync().ConfigureAwait(false)); Mediator.Subscribe(this, async _ => await RefreshSyncshellsAsync().ConfigureAwait(false)); + Mediator.Subscribe(this, async _ => await RefreshSyncshellsAsync(_.gid).ConfigureAwait(false)); } public override async void OnOpen() @@ -121,7 +123,6 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase return; } - // Build card data (same as you had) var cardData = new List<(GroupJoinDto Shell, string BroadcasterName)>(); var broadcasts = _broadcastScannerService.GetActiveSyncshellBroadcasts(); @@ -131,7 +132,6 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase if (_useTestSyncshells) { - // Fake broadcaster for test mode var displayName = !string.IsNullOrEmpty(shell.Group.Alias) ? shell.Group.Alias : shell.Group.GID; @@ -473,24 +473,22 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase ImGui.NewLine(); } - private async Task RefreshSyncshellsAsync() + private async Task RefreshSyncshellsAsync(string gid = null) { var syncshellBroadcasts = _broadcastScannerService.GetActiveSyncshellBroadcasts(); _currentSyncshells = [.. _pairManager.GroupPairs.Select(g => g.Key)]; _recentlyJoined.RemoveWhere(gid => - _currentSyncshells.Any(s => string.Equals(s.GID, gid, StringComparison.Ordinal))); + _currentSyncshells.Exists(s => string.Equals(s.GID, gid, StringComparison.Ordinal))); List? updatedList = []; if (_useTestSyncshells) { - // ---- TEST DATA PATH ---- updatedList = BuildTestSyncshells(); } else { - // ---- NORMAL BEHAVIOUR ---- if (syncshellBroadcasts.Count == 0) { ClearSyncshells(); @@ -516,6 +514,11 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase return; } + if (gid != null && _recentlyJoined.Contains(gid)) + { + _recentlyJoined.Remove(gid); + } + var previousGid = GetSelectedGid(); _nearbySyncshells.Clear();