From cab13874d84bc29305ffd17c259120cc0806fbdf Mon Sep 17 00:00:00 2001 From: cake Date: Sun, 30 Nov 2025 01:26:18 +0100 Subject: [PATCH] Allow moderators to use shell broadcasting, distinct shell finder to remove duplicate shells --- LightlessSync/UI/BroadcastUI.cs | 9 +++++---- LightlessSync/UI/SyncshellAdminUI.cs | 2 ++ LightlessSync/UI/SyncshellFinderUI.cs | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/LightlessSync/UI/BroadcastUI.cs b/LightlessSync/UI/BroadcastUI.cs index 5540b02..1efb1fa 100644 --- a/LightlessSync/UI/BroadcastUI.cs +++ b/LightlessSync/UI/BroadcastUI.cs @@ -3,6 +3,7 @@ using Dalamud.Interface; using Dalamud.Interface.Colors; using Dalamud.Interface.Utility; using Dalamud.Utility; +using LightlessSync.API.Data.Extensions; using LightlessSync.API.Dto.Group; using LightlessSync.LightlessConfiguration; using LightlessSync.Services; @@ -55,9 +56,9 @@ namespace LightlessSync.UI private void RebuildSyncshellDropdownOptions() { var selectedGid = _configService.Current.SelectedFinderSyncshell; - var allSyncshells = _allSyncshells ?? Array.Empty(); - var ownedSyncshells = allSyncshells - .Where(g => string.Equals(g.OwnerUID, _userUid, StringComparison.Ordinal)) + var allSyncshells = _allSyncshells ?? []; + var filteredSyncshells = allSyncshells + .Where(g => string.Equals(g.OwnerUID, _userUid, StringComparison.Ordinal) || g.GroupUserInfo.IsModerator()) .ToList(); _syncshellOptions.Clear(); @@ -65,7 +66,7 @@ namespace LightlessSync.UI var addedGids = new HashSet(StringComparer.Ordinal); - foreach (var shell in ownedSyncshells) + foreach (var shell in filteredSyncshells) { var label = shell.GroupAliasOrGID ?? shell.GID; _syncshellOptions.Add((label, shell.GID, true)); diff --git a/LightlessSync/UI/SyncshellAdminUI.cs b/LightlessSync/UI/SyncshellAdminUI.cs index 522fa2a..e190193 100644 --- a/LightlessSync/UI/SyncshellAdminUI.cs +++ b/LightlessSync/UI/SyncshellAdminUI.cs @@ -12,6 +12,7 @@ using LightlessSync.Services; using LightlessSync.Services.Mediator; using LightlessSync.Services.Profiles; using LightlessSync.UI.Services; +using LightlessSync.UI.Style; using LightlessSync.WebAPI; using Microsoft.Extensions.Logging; using SixLabors.ImageSharp; @@ -558,6 +559,7 @@ public class SyncshellAdminUI : WindowMediatorSubscriberBase UiSharedService.ColoredSeparator(UIColors.Get("LightlessPurple"), 1.0f); } + private void DrawUserRowCustom(Pair pair, GroupPairUserInfo? userInfoOpt, GroupFullInfoDto GroupFullInfo, int rowIndex, float colUid, float colFlags, float colActions) { using var id = ImRaii.PushId("userRow_" + pair.UserData.UID); diff --git a/LightlessSync/UI/SyncshellFinderUI.cs b/LightlessSync/UI/SyncshellFinderUI.cs index 0ebfdef..4d4dca7 100644 --- a/LightlessSync/UI/SyncshellFinderUI.cs +++ b/LightlessSync/UI/SyncshellFinderUI.cs @@ -498,7 +498,7 @@ public class SyncshellFinderUI : WindowMediatorSubscriberBase { var groups = await _apiController.GetBroadcastedGroups(syncshellBroadcasts) .ConfigureAwait(false); - updatedList = groups?.ToList(); + updatedList = groups?.DistinctBy(g => g.Group.GID).ToList(); } catch (Exception ex) {