diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index cddd05197..6cc0b9241 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 a3d228529..d8aad5283 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