Fix CharaDataGetShared

Co-authored-by: Stanley Dimant <root.darkarchon@outlook.com>
This commit is contained in:
Loporrit
2025-06-27 22:10:37 +00:00
parent 156c3d80ed
commit 8e4494153b
2 changed files with 18 additions and 3 deletions

View File

@@ -137,7 +137,8 @@ public partial class MareHub
.ToListAsync()
.ConfigureAwait(false);
var validPairs = await GetAllPairedUnpausedUsers().ConfigureAwait(false);
var individualPairs = await GetDirectPairedUnpausedUsers().ConfigureAwait(false);
var allPairs = await GetAllPairedUnpausedUsers().ConfigureAwait(false);
var allSharedDataByPair = await DbContext.CharaData
.Include(u => u.Files)
@@ -146,8 +147,10 @@ public partial class MareHub
.Include(u => u.Poses)
.Include(u => u.Uploader)
.Where(p => p.UploaderUID != UserUID && p.ShareType == CharaDataShare.Shared)
.Where(p => (validPairs.Contains(p.UploaderUID)
|| (p.AllowedIndividiuals.Any(u => u.AllowedUserUID == UserUID || (u.AllowedGroupGID != null && groups.Contains(u.AllowedGroupGID))))))
.Where(p =>
(individualPairs.Contains(p.UploaderUID) && p.AccessType == CharaDataAccess.ClosePairs)
|| (allPairs.Contains(p.UploaderUID) && p.AccessType == CharaDataAccess.AllPairs)
|| (p.AllowedIndividiuals.Any(u => u.AllowedUserUID == UserUID || (u.AllowedGroupGID != null && groups.Contains(u.AllowedGroupGID)))))
.AsSplitQuery()
.AsNoTracking()
.ToListAsync()

View File

@@ -104,6 +104,18 @@ public partial class MareHub
return ret.Where(k => !k.IsPaused).Select(k => k.UID).ToList();
}
private async Task<List<string>> GetDirectPairedUnpausedUsers(string? uid = null)
{
uid ??= UserUID;
var query = await (from userPair in DbContext.ClientPairs
join otherUserPair in DbContext.ClientPairs on userPair.OtherUserUID equals otherUserPair.UserUID
where otherUserPair.OtherUserUID == uid && userPair.UserUID == uid && !userPair.IsPaused && !otherUserPair.IsPaused
select Convert.ToString(userPair.OtherUserUID)).AsNoTracking().ToListAsync().ConfigureAwait(false);
return query;
}
private async Task<Dictionary<string, string>> GetOnlineUsers(List<string> uids)
{
var result = await _redis.GetAllAsync<string>(uids.Select(u => "UID:" + u).ToHashSet(StringComparer.Ordinal)).ConfigureAwait(false);