Fix IsPlayed filter and setting BoxSet played/unplayed
This commit is contained in:
@@ -3323,6 +3323,33 @@ public sealed class BaseItemRepository
|
|||||||
baseQuery = baseQuery.Where(s => !playedSeriesIdList.Contains(s.Id));
|
baseQuery = baseQuery.Where(s => !playedSeriesIdList.Contains(s.Id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (filter.IncludeItemTypes.Length == 1 && filter.IncludeItemTypes[0] == BaseItemKind.BoxSet)
|
||||||
|
{
|
||||||
|
var boxSetIds = baseQuery.Select(e => e.Id).ToList();
|
||||||
|
var userId = filter.User!.Id;
|
||||||
|
var playedBoxSetIds = new List<Guid>(boxSetIds.Count);
|
||||||
|
foreach (var boxSetId in boxSetIds)
|
||||||
|
{
|
||||||
|
var descendantIds = DescendantQueryHelper.GetAllDescendantIds(context, boxSetId);
|
||||||
|
var leafItems = context.BaseItems
|
||||||
|
.Where(e => descendantIds.Contains(e.Id) && !e.IsFolder && !e.IsVirtualItem);
|
||||||
|
|
||||||
|
if (leafItems.Any()
|
||||||
|
&& leafItems.All(f => f.UserData!.Any(ud => ud.UserId == userId && ud.Played)))
|
||||||
|
{
|
||||||
|
playedBoxSetIds.Add(boxSetId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter.IsPlayed.Value)
|
||||||
|
{
|
||||||
|
baseQuery = baseQuery.Where(s => playedBoxSetIds.Contains(s.Id));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
baseQuery = baseQuery.Where(s => !playedBoxSetIds.Contains(s.Id));
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var playedItemIds = context.UserData
|
var playedItemIds = context.UserData
|
||||||
|
|||||||
@@ -194,6 +194,34 @@ namespace MediaBrowser.Controller.Entities.Movies
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void MarkPlayed(User user, DateTime? datePlayed, bool resetPosition)
|
||||||
|
{
|
||||||
|
if (IsLegacyBoxSet)
|
||||||
|
{
|
||||||
|
base.MarkPlayed(user, datePlayed, resetPosition);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var item in GetLinkedChildren(user))
|
||||||
|
{
|
||||||
|
item.MarkPlayed(user, datePlayed, resetPosition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void MarkUnplayed(User user)
|
||||||
|
{
|
||||||
|
if (IsLegacyBoxSet)
|
||||||
|
{
|
||||||
|
base.MarkUnplayed(user);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var item in GetLinkedChildren(user))
|
||||||
|
{
|
||||||
|
item.MarkUnplayed(user);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override bool IsVisibleStandalone(User user)
|
public override bool IsVisibleStandalone(User user)
|
||||||
{
|
{
|
||||||
if (IsLegacyBoxSet)
|
if (IsLegacyBoxSet)
|
||||||
|
|||||||
@@ -539,6 +539,15 @@ namespace MediaBrowser.Controller.Entities
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (query.IsPlayed.HasValue)
|
||||||
|
{
|
||||||
|
userData ??= userDataManager.GetUserData(user, item);
|
||||||
|
if (item.IsPlayed(user, userData) != query.IsPlayed.Value)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (query.IsLocked.HasValue)
|
if (query.IsLocked.HasValue)
|
||||||
{
|
{
|
||||||
var val = query.IsLocked.Value;
|
var val = query.IsLocked.Value;
|
||||||
|
|||||||
Reference in New Issue
Block a user