diff options
Diffstat (limited to 'MediaBrowser.Api/SearchService.cs')
| -rw-r--r-- | MediaBrowser.Api/SearchService.cs | 45 |
1 files changed, 35 insertions, 10 deletions
diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index a3d228529..d8aad5283 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -20,7 +20,7 @@ namespace MediaBrowser.Api /// </summary> [Route("/Search/Hints", "GET")] [Api(Description = "Gets search hints based on a search term")] - public class GetSearchHints : IReturn<List<SearchHintResult>> + public class GetSearchHints : IReturn<SearchHintResult> { /// <summary> /// Skips over a given number of items within the results. Use for paging. @@ -96,7 +96,7 @@ namespace MediaBrowser.Api /// </summary> /// <param name="request">The request.</param> /// <returns>Task{IEnumerable{SearchHintResult}}.</returns> - private async Task<IEnumerable<SearchHintResult>> GetSearchHintsAsync(GetSearchHints request) + private async Task<SearchHintResult> GetSearchHintsAsync(GetSearchHints request) { IEnumerable<BaseItem> inputItems; @@ -113,34 +113,48 @@ namespace MediaBrowser.Api var results = await _searchEngine.GetSearchHints(inputItems, request.SearchTerm).ConfigureAwait(false); + var searchResultArray = results.ToArray(); + + IEnumerable<SearchHintInfo> returnResults = searchResultArray; + if (request.StartIndex.HasValue) { - results = results.Skip(request.StartIndex.Value); + returnResults = returnResults.Skip(request.StartIndex.Value); } if (request.Limit.HasValue) { - results = results.Take(request.Limit.Value); + returnResults = returnResults.Take(request.Limit.Value); } - return results.Select(GetSearchHintResult); + return new SearchHintResult + { + TotalRecordCount = searchResultArray.Length, + + SearchHints = returnResults.Select(GetSearchHintResult).ToArray() + }; } /// <summary> /// Gets the search hint result. /// </summary> - /// <param name="item">The item.</param> + /// <param name="hintInfo">The hint info.</param> /// <returns>SearchHintResult.</returns> - private SearchHintResult GetSearchHintResult(BaseItem item) + private SearchHint GetSearchHintResult(SearchHintInfo hintInfo) { - var result = new SearchHintResult + var item = hintInfo.Item; + + var result = new SearchHint { Name = item.Name, IndexNumber = item.IndexNumber, ParentIndexNumber = item.ParentIndexNumber, ItemId = DtoBuilder.GetClientItemId(item), Type = item.GetType().Name, - MediaType = item.MediaType + MediaType = item.MediaType, + MatchedTerm = hintInfo.MatchedTerm, + DisplayMediaType = item.DisplayMediaType, + RunTimeTicks = item.RunTimeTicks }; if (item.HasImage(ImageType.Primary)) @@ -160,14 +174,25 @@ namespace MediaBrowser.Api if (season != null) { result.Series = season.Series.Name; + + result.EpisodeCount = season.RecursiveChildren.OfType<Episode>().Count(); + } + + var series = item as Series; + + if (series != null) + { + result.EpisodeCount = series.RecursiveChildren.OfType<Episode>().Count(); } var album = item as MusicAlbum; if (album != null) { - var songs = album.Children.OfType<Audio>().ToList(); + var songs = album.RecursiveChildren.OfType<Audio>().ToList(); + result.SongCount = songs.Count; + result.Artists = songs .Select(i => i.Artist) .Where(i => !string.IsNullOrEmpty(i)) |
