aboutsummaryrefslogtreecommitdiff
path: root/Emby.Server.Implementations/Library/UserDataManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Emby.Server.Implementations/Library/UserDataManager.cs')
-rw-r--r--Emby.Server.Implementations/Library/UserDataManager.cs32
1 files changed, 18 insertions, 14 deletions
diff --git a/Emby.Server.Implementations/Library/UserDataManager.cs b/Emby.Server.Implementations/Library/UserDataManager.cs
index 6974c0480..3214c859a 100644
--- a/Emby.Server.Implementations/Library/UserDataManager.cs
+++ b/Emby.Server.Implementations/Library/UserDataManager.cs
@@ -181,7 +181,7 @@ namespace Emby.Server.Implementations.Library
private UserItemData? GetUserData(User user, Guid itemId, List<string> keys)
{
var cacheKey = GetCacheKey(user.InternalId, itemId);
- var data = GetUserDataInternal(user.Id, keys);
+ var data = GetUserDataInternal(user.Id, itemId, keys);
if (data is null)
{
@@ -194,27 +194,31 @@ namespace Emby.Server.Implementations.Library
return _userData.GetOrAdd(cacheKey, data);
}
- private UserItemData? GetUserDataInternal(Guid userId, List<string> keys)
+ private UserItemData? GetUserDataInternal(Guid userId, Guid itemId, List<string> keys)
{
- var key = keys.FirstOrDefault();
-
- using var context = _repository.CreateDbContext();
- var userData = context.UserData.AsNoTracking().FirstOrDefault(e => e.CustomDataKey == key && e.UserId.Equals(userId));
-
- if (userData is not null)
+ if (keys.Count == 0)
{
- return Map(userData);
+ return null;
}
- if (keys.Count > 0)
+ using var context = _repository.CreateDbContext();
+ var userData = context.UserData.AsNoTracking().Where(e => e.ItemId == itemId && keys.Contains(e.CustomDataKey) && e.UserId.Equals(userId)).ToArray();
+
+ if (userData.Length > 0)
{
- return new UserItemData
+ var directDataReference = userData.FirstOrDefault(e => e.CustomDataKey == itemId.ToString("N"));
+ if (directDataReference is not null)
{
- Key = keys[0]
- };
+ return Map(directDataReference);
+ }
+
+ return Map(userData.First());
}
- throw new UnreachableException();
+ return new UserItemData
+ {
+ Key = keys.Last()!
+ };
}
/// <summary>