aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Subtitles/SubtitleService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Subtitles/SubtitleService.cs')
-rw-r--r--MediaBrowser.Api/Subtitles/SubtitleService.cs55
1 files changed, 20 insertions, 35 deletions
diff --git a/MediaBrowser.Api/Subtitles/SubtitleService.cs b/MediaBrowser.Api/Subtitles/SubtitleService.cs
index 4d4b4cb27..c8b0a32e9 100644
--- a/MediaBrowser.Api/Subtitles/SubtitleService.cs
+++ b/MediaBrowser.Api/Subtitles/SubtitleService.cs
@@ -29,7 +29,7 @@ namespace MediaBrowser.Api.Subtitles
/// </summary>
/// <value>The id.</value>
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "DELETE")]
- public string Id { get; set; }
+ public Guid Id { get; set; }
[ApiMember(Name = "Index", Description = "The subtitle stream index", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "DELETE")]
public int Index { get; set; }
@@ -40,7 +40,7 @@ namespace MediaBrowser.Api.Subtitles
public class SearchRemoteSubtitles : IReturn<RemoteSubtitleInfo[]>
{
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
- public string Id { get; set; }
+ public Guid Id { get; set; }
[ApiMember(Name = "Language", Description = "Language", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
public string Language { get; set; }
@@ -48,20 +48,12 @@ namespace MediaBrowser.Api.Subtitles
public bool? IsPerfectMatch { get; set; }
}
- [Route("/Items/{Id}/RemoteSearch/Subtitles/Providers", "GET")]
- [Authenticated]
- public class GetSubtitleProviders : IReturn<SubtitleProviderInfo[]>
- {
- [ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
- public string Id { get; set; }
- }
-
[Route("/Items/{Id}/RemoteSearch/Subtitles/{SubtitleId}", "POST")]
[Authenticated]
public class DownloadRemoteSubtitles : IReturnVoid
{
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
- public string Id { get; set; }
+ public Guid Id { get; set; }
[ApiMember(Name = "SubtitleId", Description = "SubtitleId", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
public string SubtitleId { get; set; }
@@ -84,7 +76,7 @@ namespace MediaBrowser.Api.Subtitles
/// </summary>
/// <value>The id.</value>
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
- public string Id { get; set; }
+ public Guid Id { get; set; }
[ApiMember(Name = "MediaSourceId", Description = "MediaSourceId", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "GET")]
public string MediaSourceId { get; set; }
@@ -123,7 +115,7 @@ namespace MediaBrowser.Api.Subtitles
[ApiMember(Name = "Index", Description = "The subtitle stream index", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "GET")]
public int Index { get; set; }
- [ApiMember(Name = "SegmentLength", Description = "The subtitle srgment length", IsRequired = true, DataType = "int", ParameterType = "path", Verb = "GET")]
+ [ApiMember(Name = "SegmentLength", Description = "The subtitle srgment length", IsRequired = true, DataType = "int", ParameterType = "query", Verb = "GET")]
public int SegmentLength { get; set; }
}
@@ -195,7 +187,7 @@ namespace MediaBrowser.Api.Subtitles
builder.AppendLine("#EXT-X-ENDLIST");
- return ResultFactory.GetResult(builder.ToString(), MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
+ return ResultFactory.GetResult(Request, builder.ToString(), MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
}
public async Task<object> Get(GetSubtitle request)
@@ -206,10 +198,11 @@ namespace MediaBrowser.Api.Subtitles
}
if (string.IsNullOrEmpty(request.Format))
{
- var item = (Video)_libraryManager.GetItemById(new Guid(request.Id));
+ var item = (Video)_libraryManager.GetItemById(request.Id);
+ var idString = request.Id.ToString("N");
var mediaSource = _mediaSourceManager.GetStaticMediaSources(item, false, null)
- .First(i => string.Equals(i.Id, request.MediaSourceId ?? request.Id));
+ .First(i => string.Equals(i.Id, request.MediaSourceId ?? idString));
var subtitleStream = mediaSource.MediaStreams
.First(i => i.Type == MediaStreamType.Subtitle && i.Index == request.Index);
@@ -227,22 +220,24 @@ namespace MediaBrowser.Api.Subtitles
text = text.Replace("WEBVTT", "WEBVTT\nX-TIMESTAMP-MAP=MPEGTS:900000,LOCAL:00:00:00.000");
- return ResultFactory.GetResult(text, MimeTypes.GetMimeType("file." + request.Format));
+ return ResultFactory.GetResult(Request, text, MimeTypes.GetMimeType("file." + request.Format));
}
}
}
- return ResultFactory.GetResult(await GetSubtitles(request).ConfigureAwait(false), MimeTypes.GetMimeType("file." + request.Format));
+ return ResultFactory.GetResult(Request, await GetSubtitles(request).ConfigureAwait(false), MimeTypes.GetMimeType("file." + request.Format));
}
private Task<Stream> GetSubtitles(GetSubtitle request)
{
- return _subtitleEncoder.GetSubtitles(request.Id,
+ var item = _libraryManager.GetItemById(request.Id);
+
+ return _subtitleEncoder.GetSubtitles(item,
request.MediaSourceId,
request.Index,
request.Format,
request.StartPositionTicks,
- request.EndPositionTicks,
+ request.EndPositionTicks ?? 0,
request.CopyTimestamps,
CancellationToken.None);
}
@@ -251,30 +246,20 @@ namespace MediaBrowser.Api.Subtitles
{
var video = (Video)_libraryManager.GetItemById(request.Id);
- var response = await _subtitleManager.SearchSubtitles(video, request.Language, request.IsPerfectMatch, CancellationToken.None).ConfigureAwait(false);
-
- return ToOptimizedResult(response);
- }
-
- public void Delete(DeleteSubtitle request)
- {
- var task = _subtitleManager.DeleteSubtitles(request.Id, request.Index);
-
- Task.WaitAll(task);
+ return await _subtitleManager.SearchSubtitles(video, request.Language, request.IsPerfectMatch, CancellationToken.None).ConfigureAwait(false);
}
- public object Get(GetSubtitleProviders request)
+ public Task Delete(DeleteSubtitle request)
{
- var result = _subtitleManager.GetProviders(request.Id);
-
- return ToOptimizedResult(result);
+ var item = _libraryManager.GetItemById(request.Id);
+ return _subtitleManager.DeleteSubtitles(item, request.Index);
}
public async Task<object> Get(GetRemoteSubtitles request)
{
var result = await _subtitleManager.GetRemoteSubtitles(request.Id, CancellationToken.None).ConfigureAwait(false);
- return ResultFactory.GetResult(result.Stream, MimeTypes.GetMimeType("file." + result.Format));
+ return ResultFactory.GetResult(Request, result.Stream, MimeTypes.GetMimeType("file." + result.Format));
}
public void Post(DownloadRemoteSubtitles request)