diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Functions.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Functions.cs index 2dd2b14..831ca94 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Functions.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Functions.cs @@ -104,9 +104,11 @@ public partial class MareHub var pairIdent = await GetUserIdent(pair.GroupUserUID).ConfigureAwait(false); if (string.IsNullOrEmpty(pairIdent)) continue; + var pairInfo = await GetAllPairInfo(pair.GroupUserUID).ConfigureAwait(false); + foreach (var groupUserPair in groupUsers.Where(g => !string.Equals(g.GroupUserUID, pair.GroupUserUID, StringComparison.Ordinal))) { - await UserGroupLeave(groupUserPair, pairIdent, pair.GroupUserUID).ConfigureAwait(false); + await UserGroupLeave(groupUserPair, pairIdent, pairInfo, pair.GroupUserUID).ConfigureAwait(false); } } } @@ -166,10 +168,9 @@ public partial class MareHub await _redis.AddAsync("UID:" + UserUID, UserCharaIdent, TimeSpan.FromSeconds(60), StackExchange.Redis.When.Always, StackExchange.Redis.CommandFlags.FireAndForget).ConfigureAwait(false); } - private async Task UserGroupLeave(GroupPair groupUserPair, string userIdent, string? uid = null) + private async Task UserGroupLeave(GroupPair groupUserPair, string userIdent, Dictionary allUserPairs, string? uid = null) { uid ??= UserUID; - var allUserPairs = await GetAllPairInfo(uid).ConfigureAwait(false); if (!allUserPairs.TryGetValue(groupUserPair.GroupUserUID, out var info) || !info.IsSynced) { var groupUserIdent = await GetUserIdent(groupUserPair.GroupUserUID).ConfigureAwait(false); @@ -241,9 +242,11 @@ public partial class MareHub var ident = await GetUserIdent(userUid).ConfigureAwait(false); + var pairs = await GetAllPairInfo(userUid).ConfigureAwait(false); + foreach (var groupUserPair in groupPairsWithoutSelf) { - await UserGroupLeave(groupUserPair, ident, userUid).ConfigureAwait(false); + await UserGroupLeave(groupUserPair, ident, pairs, userUid).ConfigureAwait(false); } } diff --git a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs index d92976c..c80084b 100644 --- a/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs +++ b/MareSynchronosServer/MareSynchronosServer/Hubs/MareHub.Groups.cs @@ -117,13 +117,12 @@ public partial class MareHub if (!hasRights) return; var groupPairs = await DbContext.GroupPairs.Include(p => p.GroupUser).Where(p => p.GroupGID == dto.Group.GID).ToListAsync().ConfigureAwait(false); + var notPinned = groupPairs.Where(g => !g.IsPinned && !g.IsModerator).ToList(); - await Clients.Users(groupPairs.Where(p => !p.IsPinned && !p.IsModerator).Select(g => g.GroupUserUID)).Client_GroupDelete(new GroupDto(group.ToGroupData())).ConfigureAwait(false); + await Clients.Users(notPinned.Select(g => g.GroupUserUID)).Client_GroupDelete(new GroupDto(group.ToGroupData())).ConfigureAwait(false); _logger.LogCallInfo(MareHubLogger.Args(dto, "Success")); - var notPinned = groupPairs.Where(g => !g.IsPinned && !g.IsModerator).ToList(); - DbContext.GroupPairs.RemoveRange(notPinned); foreach (var pair in notPinned) @@ -134,9 +133,11 @@ public partial class MareHub var pairIdent = await GetUserIdent(pair.GroupUserUID).ConfigureAwait(false); if (string.IsNullOrEmpty(pairIdent)) continue; + var allUserPairs = await GetAllPairInfo(pair.GroupUserUID).ConfigureAwait(false); + foreach (var groupUserPair in groupPairs.Where(p => !string.Equals(p.GroupUserUID, pair.GroupUserUID, StringComparison.Ordinal))) { - await UserGroupLeave(groupUserPair, pairIdent, pair.GroupUserUID).ConfigureAwait(false); + await UserGroupLeave(pair, pairIdent, allUserPairs, pair.GroupUserUID).ConfigureAwait(false); } } @@ -534,9 +535,10 @@ public partial class MareHub await Clients.User(dto.User.UID).Client_GroupDelete(new GroupDto(dto.Group)).ConfigureAwait(false); + var userPairs = await GetAllPairInfo(dto.User.UID).ConfigureAwait(false); foreach (var groupUserPair in groupPairs) { - await UserGroupLeave(groupUserPair, userIdent, dto.User.UID).ConfigureAwait(false); + await UserGroupLeave(groupUserPair, userIdent, userPairs, dto.User.UID).ConfigureAwait(false); } }