diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs index cddd051971..6cc0b92414 100644 --- a/MediaBrowser.Api/Playback/BaseStreamingService.cs +++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs @@ -290,22 +290,14 @@ namespace MediaBrowser.Api.Playback /// System.String. protected string GetTextSubtitleParam(Video video, MediaStream subtitleStream, long? startTimeTicks) { - var path = subtitleStream.IsExternal ? GetConvertedAssPath(video, subtitleStream) : GetExtractedAssPath(video, subtitleStream, startTimeTicks); + var path = subtitleStream.IsExternal ? GetConvertedAssPath(video, subtitleStream, startTimeTicks) : GetExtractedAssPath(video, subtitleStream, startTimeTicks); if (string.IsNullOrEmpty(path)) { return string.Empty; } - var param = string.Format(",ass='{0}'", path.Replace('\\', '/').Replace(":/", "\\:/")); - - if (startTimeTicks.HasValue && subtitleStream.IsExternal) - { - var seconds = Convert.ToInt32(TimeSpan.FromTicks(startTimeTicks.Value).TotalSeconds); - param += string.Format(",setpts=PTS-{0}/TB", seconds); - } - - return param; + return string.Format(",ass='{0}'", path.Replace('\\', '/').Replace(":/", "\\:/")); } /// @@ -347,16 +339,21 @@ namespace MediaBrowser.Api.Playback /// /// The video. /// The subtitle stream. + /// The start time ticks. /// System.String. - private string GetConvertedAssPath(Video video, MediaStream subtitleStream) + private string GetConvertedAssPath(Video video, MediaStream subtitleStream, long? startTimeTicks) { - var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, null, ".ass"); + var offset = startTimeTicks.HasValue + ? TimeSpan.FromTicks(startTimeTicks.Value) + : TimeSpan.FromTicks(0); + + var path = Kernel.Instance.FFMpegManager.GetSubtitleCachePath(video, subtitleStream.Index, offset, ".ass"); if (!File.Exists(path)) { try { - var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, CancellationToken.None); + var task = MediaEncoder.ConvertTextSubtitleToAss(subtitleStream.Path, path, offset, CancellationToken.None); Task.WaitAll(task); } diff --git a/MediaBrowser.Api/SearchService.cs b/MediaBrowser.Api/SearchService.cs index a3d2285297..d8aad5283a 100644 --- a/MediaBrowser.Api/SearchService.cs +++ b/MediaBrowser.Api/SearchService.cs @@ -20,7 +20,7 @@ namespace MediaBrowser.Api /// [Route("/Search/Hints", "GET")] [Api(Description = "Gets search hints based on a search term")] - public class GetSearchHints : IReturn> + public class GetSearchHints : IReturn { /// /// Skips over a given number of items within the results. Use for paging. @@ -96,7 +96,7 @@ namespace MediaBrowser.Api /// /// The request. /// Task{IEnumerable{SearchHintResult}}. - private async Task> GetSearchHintsAsync(GetSearchHints request) + private async Task GetSearchHintsAsync(GetSearchHints request) { IEnumerable inputItems; @@ -113,34 +113,48 @@ namespace MediaBrowser.Api var results = await _searchEngine.GetSearchHints(inputItems, request.SearchTerm).ConfigureAwait(false); + var searchResultArray = results.ToArray(); + + IEnumerable 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() + }; } /// /// Gets the search hint result. /// - /// The item. + /// The hint info. /// SearchHintResult. - 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().Count(); + } + + var series = item as Series; + + if (series != null) + { + result.EpisodeCount = series.RecursiveChildren.OfType().Count(); } var album = item as MusicAlbum; if (album != null) { - var songs = album.Children.OfType