diff options
Diffstat (limited to 'MediaBrowser.Api/FilterService.cs')
| -rw-r--r-- | MediaBrowser.Api/FilterService.cs | 124 |
1 files changed, 120 insertions, 4 deletions
diff --git a/MediaBrowser.Api/FilterService.cs b/MediaBrowser.Api/FilterService.cs index 52b274653..585e9c49b 100644 --- a/MediaBrowser.Api/FilterService.cs +++ b/MediaBrowser.Api/FilterService.cs @@ -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 QueryFiltersLegacy GetFilters(BaseItem[] items) { - var result = new QueryFilters(); + var result = new QueryFiltersLegacy(); 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(GetQueryFiltersLegacy request, User user) { var query = new InternalItemsQuery { |
