Added refresh on leave of syncshell.

This commit is contained in:
cake
2025-11-21 04:32:53 +01:00
parent 6dfac79f5a
commit b45c1a3aba
3 changed files with 11 additions and 6 deletions

View File

@@ -107,6 +107,7 @@ public record GPoseLobbyReceiveWorldData(UserData UserData, WorldData WorldData)
public record OpenCharaDataHubWithFilterMessage(UserData UserData) : MessageBase; public record OpenCharaDataHubWithFilterMessage(UserData UserData) : MessageBase;
public record EnableBroadcastMessage(string HashedCid, bool Enabled) : MessageBase; public record EnableBroadcastMessage(string HashedCid, bool Enabled) : MessageBase;
public record BroadcastStatusChangedMessage(bool Enabled, TimeSpan? Ttl) : MessageBase; public record BroadcastStatusChangedMessage(bool Enabled, TimeSpan? Ttl) : MessageBase;
public record UserLeftSyncshellReloadFinderUi(bool hasLeft, string gid) : MessageBase;
public record SyncshellBroadcastsUpdatedMessage : MessageBase; public record SyncshellBroadcastsUpdatedMessage : MessageBase;
public record PairRequestReceivedMessage(string HashedCid, string Message) : MessageBase; public record PairRequestReceivedMessage(string HashedCid, string Message) : MessageBase;
public record PairRequestsUpdatedMessage : MessageBase; public record PairRequestsUpdatedMessage : MessageBase;

View File

@@ -111,6 +111,7 @@ public class DrawFolderGroup : DrawFolderBase
if (_uiSharedService.IconTextButton(FontAwesomeIcon.ArrowCircleLeft, "Leave Syncshell", menuWidth, true) && UiSharedService.CtrlPressed()) if (_uiSharedService.IconTextButton(FontAwesomeIcon.ArrowCircleLeft, "Leave Syncshell", menuWidth, true) && UiSharedService.CtrlPressed())
{ {
_ = _apiController.GroupLeave(_groupFullInfoDto); _ = _apiController.GroupLeave(_groupFullInfoDto);
_lightlessMediator.Publish(new UserLeftSyncshellReloadFinderUi(hasLeft: true, _groupFullInfoDto.GID));
ImGui.CloseCurrentPopup(); ImGui.CloseCurrentPopup();
} }
UiSharedService.AttachToolTip("Hold CTRL and click to leave this Syncshell" + (!string.Equals(_groupFullInfoDto.OwnerUID, _apiController.UID, StringComparison.Ordinal) UiSharedService.AttachToolTip("Hold CTRL and click to leave this Syncshell" + (!string.Equals(_groupFullInfoDto.OwnerUID, _apiController.UID, StringComparison.Ordinal)

View File

@@ -14,6 +14,7 @@ using LightlessSync.Services.Mediator;
using LightlessSync.Utils; using LightlessSync.Utils;
using LightlessSync.WebAPI; using LightlessSync.WebAPI;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using System.Collections.Specialized;
using System.Numerics; using System.Numerics;
namespace LightlessSync.UI; namespace LightlessSync.UI;
@@ -67,6 +68,7 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
Mediator.Subscribe<SyncshellBroadcastsUpdatedMessage>(this, async _ => await RefreshSyncshellsAsync().ConfigureAwait(false)); Mediator.Subscribe<SyncshellBroadcastsUpdatedMessage>(this, async _ => await RefreshSyncshellsAsync().ConfigureAwait(false));
Mediator.Subscribe<BroadcastStatusChangedMessage>(this, async _ => await RefreshSyncshellsAsync().ConfigureAwait(false)); Mediator.Subscribe<BroadcastStatusChangedMessage>(this, async _ => await RefreshSyncshellsAsync().ConfigureAwait(false));
Mediator.Subscribe<UserLeftSyncshellReloadFinderUi>(this, async _ => await RefreshSyncshellsAsync(_.gid).ConfigureAwait(false));
} }
public override async void OnOpen() public override async void OnOpen()
@@ -121,7 +123,6 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
return; return;
} }
// Build card data (same as you had)
var cardData = new List<(GroupJoinDto Shell, string BroadcasterName)>(); var cardData = new List<(GroupJoinDto Shell, string BroadcasterName)>();
var broadcasts = _broadcastScannerService.GetActiveSyncshellBroadcasts(); var broadcasts = _broadcastScannerService.GetActiveSyncshellBroadcasts();
@@ -131,7 +132,6 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
if (_useTestSyncshells) if (_useTestSyncshells)
{ {
// Fake broadcaster for test mode
var displayName = !string.IsNullOrEmpty(shell.Group.Alias) var displayName = !string.IsNullOrEmpty(shell.Group.Alias)
? shell.Group.Alias ? shell.Group.Alias
: shell.Group.GID; : shell.Group.GID;
@@ -473,24 +473,22 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
ImGui.NewLine(); ImGui.NewLine();
} }
private async Task RefreshSyncshellsAsync() private async Task RefreshSyncshellsAsync(string gid = null)
{ {
var syncshellBroadcasts = _broadcastScannerService.GetActiveSyncshellBroadcasts(); var syncshellBroadcasts = _broadcastScannerService.GetActiveSyncshellBroadcasts();
_currentSyncshells = [.. _pairManager.GroupPairs.Select(g => g.Key)]; _currentSyncshells = [.. _pairManager.GroupPairs.Select(g => g.Key)];
_recentlyJoined.RemoveWhere(gid => _recentlyJoined.RemoveWhere(gid =>
_currentSyncshells.Any(s => string.Equals(s.GID, gid, StringComparison.Ordinal))); _currentSyncshells.Exists(s => string.Equals(s.GID, gid, StringComparison.Ordinal)));
List<GroupJoinDto>? updatedList = []; List<GroupJoinDto>? updatedList = [];
if (_useTestSyncshells) if (_useTestSyncshells)
{ {
// ---- TEST DATA PATH ----
updatedList = BuildTestSyncshells(); updatedList = BuildTestSyncshells();
} }
else else
{ {
// ---- NORMAL BEHAVIOUR ----
if (syncshellBroadcasts.Count == 0) if (syncshellBroadcasts.Count == 0)
{ {
ClearSyncshells(); ClearSyncshells();
@@ -516,6 +514,11 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase
return; return;
} }
if (gid != null && _recentlyJoined.Contains(gid))
{
_recentlyJoined.Remove(gid);
}
var previousGid = GetSelectedGid(); var previousGid = GetSelectedGid();
_nearbySyncshells.Clear(); _nearbySyncshells.Clear();