瀏覽代碼

Revert IsPlayed optimization, pass UserItemData to IsPlayed when available (#14786)

Cody Robibero 3 天之前
父節點
當前提交
4d36bd635d

+ 1 - 2
Emby.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs

@@ -6,7 +6,6 @@ using Jellyfin.Database.Implementations.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Sorting;
 using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
 
 
 namespace Emby.Server.Implementations.Sorting
 namespace Emby.Server.Implementations.Sorting
 {
 {
@@ -54,7 +53,7 @@ namespace Emby.Server.Implementations.Sorting
         /// <returns>DateTime.</returns>
         /// <returns>DateTime.</returns>
         private int GetValue(BaseItem x)
         private int GetValue(BaseItem x)
         {
         {
-            return x.IsFavoriteOrLiked(User) ? 0 : 1;
+            return x.IsFavoriteOrLiked(User, userItemData: null) ? 0 : 1;
         }
         }
     }
     }
 }
 }

+ 1 - 2
Emby.Server.Implementations/Sorting/IsPlayedComparer.cs

@@ -7,7 +7,6 @@ using Jellyfin.Database.Implementations.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Sorting;
 using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
 
 
 namespace Emby.Server.Implementations.Sorting
 namespace Emby.Server.Implementations.Sorting
 {
 {
@@ -55,7 +54,7 @@ namespace Emby.Server.Implementations.Sorting
         /// <returns>DateTime.</returns>
         /// <returns>DateTime.</returns>
         private int GetValue(BaseItem x)
         private int GetValue(BaseItem x)
         {
         {
-            return x.IsPlayed(User) ? 0 : 1;
+            return x.IsPlayed(User, userItemData: null) ? 0 : 1;
         }
         }
     }
     }
 }
 }

+ 1 - 2
Emby.Server.Implementations/Sorting/IsUnplayedComparer.cs

@@ -7,7 +7,6 @@ using Jellyfin.Database.Implementations.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Sorting;
 using MediaBrowser.Controller.Sorting;
-using MediaBrowser.Model.Querying;
 
 
 namespace Emby.Server.Implementations.Sorting
 namespace Emby.Server.Implementations.Sorting
 {
 {
@@ -55,7 +54,7 @@ namespace Emby.Server.Implementations.Sorting
         /// <returns>DateTime.</returns>
         /// <returns>DateTime.</returns>
         private int GetValue(BaseItem x)
         private int GetValue(BaseItem x)
         {
         {
-            return x.IsUnplayed(User) ? 0 : 1;
+            return x.IsUnplayed(User, userItemData: null) ? 0 : 1;
         }
         }
     }
     }
 }
 }

+ 9 - 9
MediaBrowser.Controller/Entities/BaseItem.cs

@@ -2315,27 +2315,27 @@ namespace MediaBrowser.Controller.Entities
             return UpdateToRepositoryAsync(ItemUpdateType.ImageUpdate, CancellationToken.None);
             return UpdateToRepositoryAsync(ItemUpdateType.ImageUpdate, CancellationToken.None);
         }
         }
 
 
-        public virtual bool IsPlayed(User user)
+        public virtual bool IsPlayed(User user, UserItemData userItemData)
         {
         {
-            var userdata = UserDataManager.GetUserData(user, this);
+            userItemData ??= UserDataManager.GetUserData(user, this);
 
 
-            return userdata is not null && userdata.Played;
+            return userItemData is not null && userItemData.Played;
         }
         }
 
 
-        public bool IsFavoriteOrLiked(User user)
+        public bool IsFavoriteOrLiked(User user, UserItemData userItemData)
         {
         {
-            var userdata = UserDataManager.GetUserData(user, this);
+            userItemData ??= UserDataManager.GetUserData(user, this);
 
 
-            return userdata is not null && (userdata.IsFavorite || (userdata.Likes ?? false));
+            return userItemData is not null && (userItemData.IsFavorite || (userItemData.Likes ?? false));
         }
         }
 
 
-        public virtual bool IsUnplayed(User user)
+        public virtual bool IsUnplayed(User user, UserItemData userItemData)
         {
         {
             ArgumentNullException.ThrowIfNull(user);
             ArgumentNullException.ThrowIfNull(user);
 
 
-            var userdata = UserDataManager.GetUserData(user, this);
+            userItemData ??= UserDataManager.GetUserData(user, this);
 
 
-            return userdata is null || !userdata.Played;
+            return userItemData is null || !userItemData.Played;
         }
         }
 
 
         ItemLookupInfo IHasLookupInfo<ItemLookupInfo>.GetLookupInfo()
         ItemLookupInfo IHasLookupInfo<ItemLookupInfo>.GetLookupInfo()

+ 4 - 4
MediaBrowser.Controller/Entities/Folder.cs

@@ -1666,7 +1666,7 @@ namespace MediaBrowser.Controller.Entities
             }
             }
         }
         }
 
 
-        public override bool IsPlayed(User user)
+        public override bool IsPlayed(User user, UserItemData userItemData)
         {
         {
             var itemsResult = GetItemList(new InternalItemsQuery(user)
             var itemsResult = GetItemList(new InternalItemsQuery(user)
             {
             {
@@ -1677,12 +1677,12 @@ namespace MediaBrowser.Controller.Entities
             });
             });
 
 
             return itemsResult
             return itemsResult
-                .All(i => i.IsPlayed(user));
+                .All(i => i.IsPlayed(user, userItemData: null));
         }
         }
 
 
-        public override bool IsUnplayed(User user)
+        public override bool IsUnplayed(User user, UserItemData userItemData)
         {
         {
-            return !IsPlayed(user);
+            return !IsPlayed(user, userItemData);
         }
         }
 
 
         public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, DtoOptions fields)
         public override void FillUserDataDtoValues(UserItemDataDto dto, UserItemData userData, BaseItemDto itemDto, User user, DtoOptions fields)

+ 1 - 1
MediaBrowser.Controller/Entities/UserViewBuilder.cs

@@ -542,7 +542,7 @@ namespace MediaBrowser.Controller.Entities
             if (query.IsPlayed.HasValue)
             if (query.IsPlayed.HasValue)
             {
             {
                 userData ??= userDataManager.GetUserData(user, item);
                 userData ??= userDataManager.GetUserData(user, item);
-                if (userData.Played != query.IsPlayed.Value)
+                if (item.IsPlayed(user, userData) != query.IsPlayed.Value)
                 {
                 {
                     return false;
                     return false;
                 }
                 }