|
|
|
@ -1,13 +1,12 @@
|
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Jellyfin.Api.Constants;
|
|
|
|
|
using Jellyfin.Api.Helpers;
|
|
|
|
|
using Jellyfin.Api.ModelBinders;
|
|
|
|
|
using Jellyfin.Data.Enums;
|
|
|
|
|
using MediaBrowser.Controller.Dto;
|
|
|
|
|
using MediaBrowser.Controller.Entities;
|
|
|
|
|
using MediaBrowser.Controller.Entities.Audio;
|
|
|
|
|
using MediaBrowser.Controller.Entities.Movies;
|
|
|
|
|
using MediaBrowser.Controller.Library;
|
|
|
|
|
using MediaBrowser.Controller.Playlists;
|
|
|
|
|
using MediaBrowser.Model.Dto;
|
|
|
|
|
using MediaBrowser.Model.Querying;
|
|
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
@ -51,7 +50,7 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
public ActionResult<QueryFiltersLegacy> GetQueryFiltersLegacy(
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
|
[FromQuery] Guid? parentId,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] includeItemTypes,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] mediaTypes)
|
|
|
|
|
{
|
|
|
|
|
var user = userId.HasValue && !userId.Equals(Guid.Empty)
|
|
|
|
@ -60,10 +59,10 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
|
|
|
|
|
BaseItem? item = null;
|
|
|
|
|
if (includeItemTypes.Length != 1
|
|
|
|
|
|| !(string.Equals(includeItemTypes[0], nameof(BoxSet), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(Playlist), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(Trailer), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], "Program", StringComparison.OrdinalIgnoreCase)))
|
|
|
|
|
|| !(includeItemTypes[0] == BaseItemKind.BoxSet
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Playlist
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Trailer
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Program))
|
|
|
|
|
{
|
|
|
|
|
item = _libraryManager.GetParentItem(parentId, user?.Id);
|
|
|
|
|
}
|
|
|
|
@ -72,7 +71,7 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
{
|
|
|
|
|
User = user,
|
|
|
|
|
MediaTypes = mediaTypes,
|
|
|
|
|
IncludeItemTypes = includeItemTypes,
|
|
|
|
|
IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
|
|
|
|
|
Recursive = true,
|
|
|
|
|
EnableTotalRecordCount = false,
|
|
|
|
|
DtoOptions = new DtoOptions
|
|
|
|
@ -137,7 +136,7 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
public ActionResult<QueryFilters> GetQueryFilters(
|
|
|
|
|
[FromQuery] Guid? userId,
|
|
|
|
|
[FromQuery] Guid? parentId,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] string[] includeItemTypes,
|
|
|
|
|
[FromQuery, ModelBinder(typeof(CommaDelimitedArrayModelBinder))] BaseItemKind[] includeItemTypes,
|
|
|
|
|
[FromQuery] bool? isAiring,
|
|
|
|
|
[FromQuery] bool? isMovie,
|
|
|
|
|
[FromQuery] bool? isSports,
|
|
|
|
@ -152,10 +151,10 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
|
|
|
|
|
BaseItem? parentItem = null;
|
|
|
|
|
if (includeItemTypes.Length == 1
|
|
|
|
|
&& (string.Equals(includeItemTypes[0], nameof(BoxSet), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(Playlist), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(Trailer), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], "Program", StringComparison.OrdinalIgnoreCase)))
|
|
|
|
|
&& (includeItemTypes[0] == BaseItemKind.BoxSet
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Playlist
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Trailer
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Program))
|
|
|
|
|
{
|
|
|
|
|
parentItem = null;
|
|
|
|
|
}
|
|
|
|
@ -167,7 +166,7 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
var filters = new QueryFilters();
|
|
|
|
|
var genreQuery = new InternalItemsQuery(user)
|
|
|
|
|
{
|
|
|
|
|
IncludeItemTypes = includeItemTypes,
|
|
|
|
|
IncludeItemTypes = RequestHelpers.GetItemTypeStrings(includeItemTypes),
|
|
|
|
|
DtoOptions = new DtoOptions
|
|
|
|
|
{
|
|
|
|
|
Fields = Array.Empty<ItemFields>(),
|
|
|
|
@ -192,10 +191,10 @@ namespace Jellyfin.Api.Controllers
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (includeItemTypes.Length == 1
|
|
|
|
|
&& (string.Equals(includeItemTypes[0], nameof(MusicAlbum), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(MusicVideo), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(MusicArtist), StringComparison.OrdinalIgnoreCase)
|
|
|
|
|
|| string.Equals(includeItemTypes[0], nameof(Audio), StringComparison.OrdinalIgnoreCase)))
|
|
|
|
|
&& (includeItemTypes[0] == BaseItemKind.MusicAlbum
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.MusicVideo
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.MusicArtist
|
|
|
|
|
|| includeItemTypes[0] == BaseItemKind.Audio))
|
|
|
|
|
{
|
|
|
|
|
filters.Genres = _libraryManager.GetMusicGenres(genreQuery).Items.Select(i => new NameGuidPair
|
|
|
|
|
{
|
|
|
|
|