Return BadRequest when an invalid set of filters is given

This commit is contained in:
Bond_009
2026-03-11 21:20:14 +01:00
parent 08f9ec5d37
commit 946c6b9981
6 changed files with 104 additions and 167 deletions

View File

@@ -10,6 +10,7 @@ using Jellyfin.Database.Implementations.Entities;
using Jellyfin.Database.Implementations.Enums;
using MediaBrowser.Controller.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Querying;
namespace MediaBrowser.Controller.Entities
{
@@ -388,5 +389,75 @@ namespace MediaBrowser.Controller.Entities
User = user;
}
public void ApplyFilters(ItemFilter[] filters)
{
static void ThrowConflictingFilters()
=> throw new ArgumentException("Conflicting filters", nameof(filters));
foreach (var filter in filters)
{
switch (filter)
{
case ItemFilter.IsFolder:
if (filters.Contains(ItemFilter.IsNotFolder))
{
ThrowConflictingFilters();
}
IsFolder = true;
break;
case ItemFilter.IsNotFolder:
if (filters.Contains(ItemFilter.IsFolder))
{
ThrowConflictingFilters();
}
IsFolder = false;
break;
case ItemFilter.IsUnplayed:
if (filters.Contains(ItemFilter.IsPlayed))
{
ThrowConflictingFilters();
}
IsPlayed = false;
break;
case ItemFilter.IsPlayed:
if (filters.Contains(ItemFilter.IsUnplayed))
{
ThrowConflictingFilters();
}
IsPlayed = true;
break;
case ItemFilter.IsFavorite:
IsFavorite = true;
break;
case ItemFilter.IsResumable:
IsResumable = true;
break;
case ItemFilter.Likes:
if (filters.Contains(ItemFilter.Dislikes))
{
ThrowConflictingFilters();
}
IsLiked = true;
break;
case ItemFilter.Dislikes:
if (filters.Contains(ItemFilter.Likes))
{
ThrowConflictingFilters();
}
IsLiked = false;
break;
case ItemFilter.IsFavoriteOrLikes:
IsFavoriteOrLiked = true;
break;
}
}
}
}
}