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

This commit is contained in:
Cody Robibero 2025-09-14 11:18:21 -06:00 committed by GitHub
parent 7c6cedd90a
commit 4d36bd635d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 17 additions and 20 deletions

View File

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

View File

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

View File

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

View File

@ -2315,27 +2315,27 @@ namespace MediaBrowser.Controller.Entities
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);
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()

View File

@ -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)
{
@ -1677,12 +1677,12 @@ namespace MediaBrowser.Controller.Entities
});
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)

View File

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