@ -2,6 +2,7 @@
using MediaBrowser.Controller.Library ;
using MediaBrowser.Controller.Net ;
using MediaBrowser.Model.Querying ;
using MediaBrowser.Model.Dto ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
@ -11,6 +12,36 @@ using MediaBrowser.Model.Services;
namespace MediaBrowser.Api
{
[Route("/Items/Filters", "GET", Summary = "Gets branding configuration")]
public class GetQueryFiltersLegacy : IReturn < QueryFiltersLegacy >
{
/// <summary>
/// Gets or sets the user id.
/// </summary>
/// <value>The user id.</value>
[ApiMember(Name = "UserId", Description = "User Id", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string UserId { get ; set ; }
[ApiMember(Name = "ParentId", Description = "Specify this to localize the search to a specific item or folder. Omit to use the root", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string ParentId { get ; set ; }
[ApiMember(Name = "IncludeItemTypes", Description = "Optional. If specified, results will be filtered based on item type. This allows multiple, comma delimeted.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
public string IncludeItemTypes { get ; set ; }
[ApiMember(Name = "MediaTypes", Description = "Optional filter by MediaType. Allows multiple, comma delimited.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET", AllowMultiple = true)]
public string MediaTypes { get ; set ; }
public string [ ] GetMediaTypes ( )
{
return ( MediaTypes ? ? string . Empty ) . Split ( new [ ] { ',' } , StringSplitOptions . RemoveEmptyEntries ) ;
}
public string [ ] GetIncludeItemTypes ( )
{
return ( IncludeItemTypes ? ? string . Empty ) . Split ( new [ ] { ',' } , StringSplitOptions . RemoveEmptyEntries ) ;
}
}
[Route("/Items/Filters2", "GET", Summary = "Gets branding configuration")]
public class GetQueryFilters : IReturn < QueryFilters >
{
/// <summary>
@ -38,6 +69,13 @@ namespace MediaBrowser.Api
{
return ( IncludeItemTypes ? ? string . Empty ) . Split ( new [ ] { ',' } , StringSplitOptions . RemoveEmptyEntries ) ;
}
public bool? IsAiring { get ; set ; }
public bool? IsMovie { get ; set ; }
public bool? IsSports { get ; set ; }
public bool? IsKids { get ; set ; }
public bool? IsNews { get ; set ; }
public bool? IsSeries { get ; set ; }
}
[Authenticated]
@ -57,18 +95,96 @@ namespace MediaBrowser.Api
var parentItem = string . IsNullOrEmpty ( request . ParentId ) ? null : _libraryManager . GetItemById ( request . ParentId ) ;
var user = ! string . IsNullOrWhiteSpace ( request . UserId ) ? _userManager . GetUserById ( request . UserId ) : null ;
if ( string . Equals ( request . IncludeItemTypes , "BoxSet" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "Playlist" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , typeof ( Trailer ) . Name , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "Program" , StringComparison . OrdinalIgnoreCase ) )
{
parentItem = null ;
}
var filters = new QueryFilters ( ) ;
var genreQuery = new InternalItemsQuery ( user )
{
AncestorIds = parentItem = = null ? new string [ ] { } : new string [ ] { parentItem . Id . ToString ( "N" ) } ,
IncludeItemTypes = request . GetIncludeItemTypes ( ) ,
DtoOptions = new Controller . Dto . DtoOptions
{
Fields = new ItemFields [ ] { } ,
EnableImages = false ,
EnableUserData = false
} ,
IsAiring = request . IsAiring ,
IsMovie = request . IsMovie ,
IsSports = request . IsSports ,
IsKids = request . IsKids ,
IsNews = request . IsNews ,
IsSeries = request . IsSeries
} ;
if ( string . Equals ( request . IncludeItemTypes , "MusicAlbum" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "MusicVideo" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "MusicArtist" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "Audio" , StringComparison . OrdinalIgnoreCase ) )
{
filters . Genres = _libraryManager . GetMusicGenres ( genreQuery ) . Items . Select ( i = > new NameIdPair
{
Name = i . Item1 . Name ,
Id = i . Item1 . Id . ToString ( "N" )
} ) . ToArray ( ) ;
}
else if ( string . Equals ( request . IncludeItemTypes , "Game" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "GameSystem" , StringComparison . OrdinalIgnoreCase ) )
{
filters . Genres = _libraryManager . GetGameGenres ( genreQuery ) . Items . Select ( i = > new NameIdPair
{
Name = i . Item1 . Name ,
Id = i . Item1 . Id . ToString ( "N" )
} ) . ToArray ( ) ;
}
else
{
filters . Genres = _libraryManager . GetGenres ( genreQuery ) . Items . Select ( i = > new NameIdPair
{
Name = i . Item1 . Name ,
Id = i . Item1 . Id . ToString ( "N" )
} ) . ToArray ( ) ;
}
return ToOptimizedResult ( filters ) ;
}
public object Get ( GetQueryFiltersLegacy request )
{
var parentItem = string . IsNullOrEmpty ( request . ParentId ) ? null : _libraryManager . GetItemById ( request . ParentId ) ;
var user = ! string . IsNullOrWhiteSpace ( request . UserId ) ? _userManager . GetUserById ( request . UserId ) : null ;
if ( string . Equals ( request . IncludeItemTypes , "BoxSet" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "Playlist" , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , typeof ( Trailer ) . Name , StringComparison . OrdinalIgnoreCase ) | |
string . Equals ( request . IncludeItemTypes , "Program" , StringComparison . OrdinalIgnoreCase ) )
{
parentItem = null ;
}
var item = string . IsNullOrEmpty ( request . ParentId ) ?
user = = null ? _libraryManager . RootFolder : user . RootFolder :
parentItem ;
var result = ( ( Folder ) item ) . GetItemList ( GetItemsQuery ( request , user ) ) ;
return ToOptimizedResult ( GetFilters ( result ) ) ;
var filters = GetFilters ( result ) ;
return ToOptimizedResult ( filters ) ;
}
private QueryFilters GetFilters ( BaseItem [ ] items )
private QueryFilters Legacy GetFilters ( BaseItem [ ] items )
{
var result = new QueryFilters ( ) ;
var result = new QueryFilters Legacy ( ) ;
result . Years = items . Select ( i = > i . ProductionYear ? ? - 1 )
. Where ( i = > i > 0 )
@ -97,7 +213,7 @@ namespace MediaBrowser.Api
return result ;
}
private InternalItemsQuery GetItemsQuery ( GetQueryFilters request , User user )
private InternalItemsQuery GetItemsQuery ( GetQueryFilters Legacy request , User user )
{
var query = new InternalItemsQuery
{