fix group clearing etc. probably

This commit is contained in:
rootdarkarchon
2023-11-12 21:49:47 +01:00
parent 9590722749
commit 41e73d6fba
2 changed files with 14 additions and 9 deletions

View File

@@ -104,9 +104,11 @@ public partial class MareHub
var pairIdent = await GetUserIdent(pair.GroupUserUID).ConfigureAwait(false); var pairIdent = await GetUserIdent(pair.GroupUserUID).ConfigureAwait(false);
if (string.IsNullOrEmpty(pairIdent)) continue; 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))) 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); 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<string, UserInfo> allUserPairs, string? uid = null)
{ {
uid ??= UserUID; uid ??= UserUID;
var allUserPairs = await GetAllPairInfo(uid).ConfigureAwait(false);
if (!allUserPairs.TryGetValue(groupUserPair.GroupUserUID, out var info) || !info.IsSynced) if (!allUserPairs.TryGetValue(groupUserPair.GroupUserUID, out var info) || !info.IsSynced)
{ {
var groupUserIdent = await GetUserIdent(groupUserPair.GroupUserUID).ConfigureAwait(false); var groupUserIdent = await GetUserIdent(groupUserPair.GroupUserUID).ConfigureAwait(false);
@@ -241,9 +242,11 @@ public partial class MareHub
var ident = await GetUserIdent(userUid).ConfigureAwait(false); var ident = await GetUserIdent(userUid).ConfigureAwait(false);
var pairs = await GetAllPairInfo(userUid).ConfigureAwait(false);
foreach (var groupUserPair in groupPairsWithoutSelf) foreach (var groupUserPair in groupPairsWithoutSelf)
{ {
await UserGroupLeave(groupUserPair, ident, userUid).ConfigureAwait(false); await UserGroupLeave(groupUserPair, ident, pairs, userUid).ConfigureAwait(false);
} }
} }

View File

@@ -117,13 +117,12 @@ public partial class MareHub
if (!hasRights) return; if (!hasRights) return;
var groupPairs = await DbContext.GroupPairs.Include(p => p.GroupUser).Where(p => p.GroupGID == dto.Group.GID).ToListAsync().ConfigureAwait(false); 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")); _logger.LogCallInfo(MareHubLogger.Args(dto, "Success"));
var notPinned = groupPairs.Where(g => !g.IsPinned && !g.IsModerator).ToList();
DbContext.GroupPairs.RemoveRange(notPinned); DbContext.GroupPairs.RemoveRange(notPinned);
foreach (var pair in notPinned) foreach (var pair in notPinned)
@@ -134,9 +133,11 @@ public partial class MareHub
var pairIdent = await GetUserIdent(pair.GroupUserUID).ConfigureAwait(false); var pairIdent = await GetUserIdent(pair.GroupUserUID).ConfigureAwait(false);
if (string.IsNullOrEmpty(pairIdent)) continue; 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))) 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); 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) foreach (var groupUserPair in groupPairs)
{ {
await UserGroupLeave(groupUserPair, userIdent, dto.User.UID).ConfigureAwait(false); await UserGroupLeave(groupUserPair, userIdent, userPairs, dto.User.UID).ConfigureAwait(false);
} }
} }