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

View File

@@ -104,6 +104,18 @@ public partial class MareHub
return ret.Where(k => !k.IsPaused).Select(k => k.UID).ToList(); 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) 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); var result = await _redis.GetAllAsync<string>(uids.Select(u => "UID:" + u).ToHashSet(StringComparer.Ordinal)).ConfigureAwait(false);