aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Emby.Server.Implementations/Data/SqliteItemRepository.cs8
-rw-r--r--Emby.Server.Implementations/LiveTv/LiveTvManager.cs3
-rw-r--r--MediaBrowser.Api/FilterService.cs124
-rw-r--r--MediaBrowser.Api/LiveTv/LiveTvService.cs4
-rw-r--r--MediaBrowser.Model/LiveTv/ProgramQuery.cs2
-rw-r--r--MediaBrowser.Model/Querying/QueryFilters.cs18
6 files changed, 150 insertions, 9 deletions
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
index ddead897e..830d6447e 100644
--- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs
+++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs
@@ -5264,7 +5264,13 @@ where AncestorIdText not null and ItemValues.Value not null and ItemValues.Type
ItemIds = query.ItemIds,
TopParentIds = query.TopParentIds,
ParentId = query.ParentId,
- IsPlayed = query.IsPlayed
+ IsPlayed = query.IsPlayed,
+ IsAiring = query.IsAiring,
+ IsMovie = query.IsMovie,
+ IsSports = query.IsSports,
+ IsKids = query.IsKids,
+ IsNews = query.IsNews,
+ IsSeries = query.IsSeries
};
var innerWhereClauses = GetWhereClauses(innerQuery, null);
diff --git a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
index 7e27877e7..66eabf523 100644
--- a/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
+++ b/Emby.Server.Implementations/LiveTv/LiveTvManager.cs
@@ -125,7 +125,7 @@ namespace Emby.Server.Implementations.LiveTv
public void AddParts(IEnumerable<ILiveTvService> services, IEnumerable<ITunerHost> tunerHosts, IEnumerable<IListingsProvider> listingProviders)
{
_services = services.ToArray();
- _tunerHosts.AddRange(tunerHosts);
+ _tunerHosts.AddRange(tunerHosts.Where(i => i.IsSupported));
_listingProviders.AddRange(listingProviders);
foreach (var service in _services)
@@ -947,6 +947,7 @@ namespace Emby.Server.Implementations.LiveTv
IsKids = query.IsKids,
IsNews = query.IsNews,
Genres = query.Genres,
+ GenreIds = query.GenreIds,
StartIndex = query.StartIndex,
Limit = query.Limit,
OrderBy = query.OrderBy,
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
{
diff --git a/MediaBrowser.Api/LiveTv/LiveTvService.cs b/MediaBrowser.Api/LiveTv/LiveTvService.cs
index 703c96e0c..c13762048 100644
--- a/MediaBrowser.Api/LiveTv/LiveTvService.cs
+++ b/MediaBrowser.Api/LiveTv/LiveTvService.cs
@@ -379,6 +379,9 @@ namespace MediaBrowser.Api.LiveTv
[ApiMember(Name = "Genres", Description = "The genres to return guide information for.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET,POST")]
public string Genres { get; set; }
+ [ApiMember(Name = "GenreIds", Description = "The genres to return guide information for.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET,POST")]
+ public string GenreIds { get; set; }
+
[ApiMember(Name = "EnableImages", Description = "Optional, include image information in output", IsRequired = false, DataType = "boolean", ParameterType = "query", Verb = "GET")]
public bool? EnableImages { get; set; }
@@ -1003,6 +1006,7 @@ namespace MediaBrowser.Api.LiveTv
query.IsSports = request.IsSports;
query.SeriesTimerId = request.SeriesTimerId;
query.Genres = (request.Genres ?? String.Empty).Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
+ query.GenreIds = (request.GenreIds ?? String.Empty).Split(new[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
if (!string.IsNullOrWhiteSpace(request.LibrarySeriesId))
{
diff --git a/MediaBrowser.Model/LiveTv/ProgramQuery.cs b/MediaBrowser.Model/LiveTv/ProgramQuery.cs
index c0959635f..ec3f8ad67 100644
--- a/MediaBrowser.Model/LiveTv/ProgramQuery.cs
+++ b/MediaBrowser.Model/LiveTv/ProgramQuery.cs
@@ -14,6 +14,7 @@ namespace MediaBrowser.Model.LiveTv
ChannelIds = new string[] { };
OrderBy = new Tuple<string, SortOrder>[] { };
Genres = new string[] { };
+ GenreIds = new string[] { };
EnableTotalRecordCount = true;
EnableUserData = true;
}
@@ -110,6 +111,7 @@ namespace MediaBrowser.Model.LiveTv
/// Limit results to items containing specific genres
/// </summary>
/// <value>The genres.</value>
+ public string[] GenreIds { get; set; }
public string[] Genres { get; set; }
}
} \ No newline at end of file
diff --git a/MediaBrowser.Model/Querying/QueryFilters.cs b/MediaBrowser.Model/Querying/QueryFilters.cs
index dd575c2a8..3a261857b 100644
--- a/MediaBrowser.Model/Querying/QueryFilters.cs
+++ b/MediaBrowser.Model/Querying/QueryFilters.cs
@@ -1,14 +1,15 @@
-
+using MediaBrowser.Model.Dto;
+
namespace MediaBrowser.Model.Querying
{
- public class QueryFilters
+ public class QueryFiltersLegacy
{
public string[] Genres { get; set; }
public string[] Tags { get; set; }
public string[] OfficialRatings { get; set; }
public int[] Years { get; set; }
- public QueryFilters()
+ public QueryFiltersLegacy()
{
Genres = new string[] { };
Tags = new string[] { };
@@ -16,4 +17,15 @@ namespace MediaBrowser.Model.Querying
Years = new int[] { };
}
}
+ public class QueryFilters
+ {
+ public NameIdPair[] Genres { get; set; }
+ public string[] Tags { get; set; }
+
+ public QueryFilters()
+ {
+ Tags = new string[] { };
+ Genres = new NameIdPair[] { };
+ }
+ }
}