diff options
Diffstat (limited to 'MediaBrowser.Api')
| -rw-r--r-- | MediaBrowser.Api/FilterService.cs | 112 | ||||
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 2 | ||||
| -rw-r--r-- | MediaBrowser.Api/MediaBrowser.Api.csproj | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/UserLibrary/ItemsService.cs | 6 | ||||
| -rw-r--r-- | MediaBrowser.Api/packages.config | 2 |
5 files changed, 119 insertions, 9 deletions
diff --git a/MediaBrowser.Api/FilterService.cs b/MediaBrowser.Api/FilterService.cs new file mode 100644 index 0000000000..fb51b2bdd4 --- /dev/null +++ b/MediaBrowser.Api/FilterService.cs @@ -0,0 +1,112 @@ +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Net; +using MediaBrowser.Model.Querying; +using ServiceStack; +using System; +using System.Linq; +using System.Threading.Tasks; + +namespace MediaBrowser.Api +{ + [Route("/Items/Filters", "GET", Summary = "Gets branding configuration")] + public class GetQueryFilters : IReturn<QueryFilters> + { + /// <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); + } + } + + [Authenticated] + public class FilterService : BaseApiService + { + private readonly ILibraryManager _libraryManager; + private readonly IUserManager _userManager; + + public FilterService(ILibraryManager libraryManager, IUserManager userManager) + { + _libraryManager = libraryManager; + _userManager = userManager; + } + + public async Task<object> Get(GetQueryFilters request) + { + var parentItem = string.IsNullOrEmpty(request.ParentId) ? null : _libraryManager.GetItemById(request.ParentId); + var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; + + var item = string.IsNullOrEmpty(request.ParentId) ? + user == null ? _libraryManager.RootFolder : user.RootFolder : + parentItem; + + var result = await ((Folder)item).GetItems(GetItemsQuery(request, user)); + + return ToOptimizedResult(GetFilters(result.Items)); + } + + private QueryFilters GetFilters(BaseItem[] items) + { + var result = new QueryFilters(); + + result.Years = items.Select(i => i.ProductionYear ?? -1) + .Where(i => i > 0) + .Distinct() + .OrderBy(i => i) + .ToArray(); + + result.Genres = items.SelectMany(i => i.Genres) + .Distinct(StringComparer.OrdinalIgnoreCase) + .OrderBy(i => i) + .ToArray(); + + result.Tags = items.OfType<IHasTags>() + .SelectMany(i => i.Tags) + .Distinct(StringComparer.OrdinalIgnoreCase) + .OrderBy(i => i) + .ToArray(); + + result.OfficialRatings = items + .Select(i => i.OfficialRating) + .Where(i => !string.IsNullOrWhiteSpace(i)) + .Distinct(StringComparer.OrdinalIgnoreCase) + .OrderBy(i => i) + .ToArray(); + + return result; + } + + private InternalItemsQuery GetItemsQuery(GetQueryFilters request, User user) + { + var query = new InternalItemsQuery + { + User = user, + MediaTypes = request.GetMediaTypes(), + IncludeItemTypes = request.GetIncludeItemTypes(), + Recursive = true + }; + + return query; + } + } +} diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index 7fc43e1642..3262537957 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -658,7 +658,7 @@ namespace MediaBrowser.Api.Images private ImageOutputFormat[] GetClientSupportedFormats() { - if (Request.AcceptTypes.Contains("image/webp", StringComparer.OrdinalIgnoreCase)) + if ((Request.AcceptTypes ?? new string[] { }).Contains("image/webp", StringComparer.OrdinalIgnoreCase)) { return new[] { ImageOutputFormat.Webp, ImageOutputFormat.Jpg, ImageOutputFormat.Png }; } diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj index 26d826c694..5a6e6f5450 100644 --- a/MediaBrowser.Api/MediaBrowser.Api.csproj +++ b/MediaBrowser.Api/MediaBrowser.Api.csproj @@ -49,8 +49,9 @@ <RunPostBuildEvent>Always</RunPostBuildEvent> </PropertyGroup> <ItemGroup> - <Reference Include="MoreLinq"> - <HintPath>..\packages\morelinq.1.0.16006\lib\net35\MoreLinq.dll</HintPath> + <Reference Include="MoreLinq, Version=1.1.17511.0, Culture=neutral, PublicKeyToken=384d532d7e88985d, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\packages\morelinq.1.1.0\lib\net35\MoreLinq.dll</HintPath> </Reference> <Reference Include="System" /> <Reference Include="System.Core" /> @@ -74,6 +75,7 @@ <Compile Include="Devices\DeviceService.cs" /> <Compile Include="Dlna\DlnaServerService.cs" /> <Compile Include="Dlna\DlnaService.cs" /> + <Compile Include="FilterService.cs" /> <Compile Include="Library\ChapterService.cs" /> <Compile Include="Playback\Hls\MpegDashService.cs" /> <Compile Include="PlaylistService.cs" /> diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs index 9cad64bfa4..f2da135c28 100644 --- a/MediaBrowser.Api/UserLibrary/ItemsService.cs +++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs @@ -1,5 +1,4 @@ -using System.Threading; -using MediaBrowser.Controller.Collections; +using MediaBrowser.Controller.Collections; using MediaBrowser.Controller.Dto; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Audio; @@ -8,15 +7,12 @@ using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Localization; using MediaBrowser.Controller.Net; -using MediaBrowser.Controller.Providers; -using MediaBrowser.Model.Channels; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Querying; using ServiceStack; using System; using System.Collections.Generic; using System.Globalization; -using System.IO; using System.Linq; using System.Threading.Tasks; diff --git a/MediaBrowser.Api/packages.config b/MediaBrowser.Api/packages.config index f40bfae21f..6df1662040 100644 --- a/MediaBrowser.Api/packages.config +++ b/MediaBrowser.Api/packages.config @@ -1,4 +1,4 @@ <?xml version="1.0" encoding="utf-8"?> <packages> - <package id="morelinq" version="1.0.16006" targetFramework="net45" /> + <package id="morelinq" version="1.1.0" targetFramework="net45" /> </packages>
\ No newline at end of file |
