diff options
Diffstat (limited to 'MediaBrowser.Api/SuggestionsService.cs')
| -rw-r--r-- | MediaBrowser.Api/SuggestionsService.cs | 53 |
1 files changed, 38 insertions, 15 deletions
diff --git a/MediaBrowser.Api/SuggestionsService.cs b/MediaBrowser.Api/SuggestionsService.cs index 7196c0f39..3e901e303 100644 --- a/MediaBrowser.Api/SuggestionsService.cs +++ b/MediaBrowser.Api/SuggestionsService.cs @@ -12,6 +12,7 @@ using MediaBrowser.Controller.Library; namespace MediaBrowser.Api { [Route("/Users/{UserId}/Suggestions", "GET", Summary = "Gets items based on a query.")] + [Route("/Users/{UserId}/Suggestions", "POST", Summary = "Gets items based on a query.")] public class GetSuggestedItems : IReturn<QueryResult<BaseItem>> { public string MediaType { get; set; } @@ -20,6 +21,7 @@ namespace MediaBrowser.Api public bool EnableTotalRecordCount { get; set; } public int? StartIndex { get; set; } public int? Limit { get; set; } + public string Name { get; set; } public string[] GetMediaTypes() { @@ -54,6 +56,13 @@ namespace MediaBrowser.Api return ToOptimizedResult(result); } + public async Task<object> Post(GetSuggestedItems request) + { + var result = await GetResultItems(request).ConfigureAwait(false); + + return ToOptimizedResult(result); + } + private async Task<QueryResult<BaseItemDto>> GetResultItems(GetSuggestedItems request) { var user = !string.IsNullOrWhiteSpace(request.UserId) ? _userManager.GetUserById(request.UserId) : null; @@ -77,7 +86,30 @@ namespace MediaBrowser.Api private QueryResult<BaseItem> GetItems(GetSuggestedItems request, User user, DtoOptions dtoOptions) { - var query = new InternalItemsQuery(user) + BaseItem similarToItem = null; + + if (!string.IsNullOrWhiteSpace(request.Name)) + { + // get item by name, then get similar items from that + similarToItem = _libraryManager.GetItemList(new InternalItemsQuery(user) + { + SortBy = new string[] {ItemSortBy.Random}, + MediaTypes = request.GetMediaTypes(), + IncludeItemTypes = request.GetIncludeItemTypes(), + IsVirtualItem = false, + Name = request.Name, + Recursive = true, + Limit = 1 + + }).FirstOrDefault(); + + if (similarToItem == null) + { + return new QueryResult<BaseItem>(); + } + } + + return _libraryManager.GetItemsResult(new InternalItemsQuery(user) { SortBy = new string[] { ItemSortBy.Random }, MediaTypes = request.GetMediaTypes(), @@ -85,20 +117,11 @@ namespace MediaBrowser.Api IsVirtualItem = false, StartIndex = request.StartIndex, Limit = request.Limit, - DtoOptions = dtoOptions - }; - - if (request.EnableTotalRecordCount) - { - return _libraryManager.GetItemsResult(query); - } - - var items = _libraryManager.GetItemList(query).ToArray(); - - return new QueryResult<BaseItem> - { - Items = items - }; + DtoOptions = dtoOptions, + EnableTotalRecordCount = request.EnableTotalRecordCount, + Recursive = true, + SimilarTo = similarToItem + }); } } } |
