aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-08-22 11:47:44 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-08-22 11:47:44 -0400
commit21d88faa187f89854f2ab5f5146baea70b6bc118 (patch)
tree58b85677968f1f5a7f61b00380f072f88ce51958
parentca66390e2445c94c769d19d601c88fe2f79f901a (diff)
added json subtitle output
-rw-r--r--MediaBrowser.Api/Subtitles/SubtitleService.cs6
-rw-r--r--MediaBrowser.Common/Net/MimeTypes.cs4
-rw-r--r--MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj1
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs27
-rw-r--r--MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs9
-rw-r--r--MediaBrowser.Server.Implementations/Session/HttpSessionController.cs2
-rw-r--r--MediaBrowser.ServerApplication/ApplicationHost.cs2
7 files changed, 47 insertions, 4 deletions
diff --git a/MediaBrowser.Api/Subtitles/SubtitleService.cs b/MediaBrowser.Api/Subtitles/SubtitleService.cs
index dc5799239..6e2882319 100644
--- a/MediaBrowser.Api/Subtitles/SubtitleService.cs
+++ b/MediaBrowser.Api/Subtitles/SubtitleService.cs
@@ -174,12 +174,16 @@ namespace MediaBrowser.Api.Subtitles
}
builder.AppendLine("#EXT-X-ENDLIST");
-
+
return ResultFactory.GetResult(builder.ToString(), Common.Net.MimeTypes.GetMimeType("playlist.m3u8"), new Dictionary<string, string>());
}
public object Get(GetSubtitle request)
{
+ if (string.Equals(request.Format, "js", StringComparison.OrdinalIgnoreCase))
+ {
+ request.Format = "json";
+ }
if (string.IsNullOrEmpty(request.Format))
{
var item = (Video)_libraryManager.GetItemById(new Guid(request.Id));
diff --git a/MediaBrowser.Common/Net/MimeTypes.cs b/MediaBrowser.Common/Net/MimeTypes.cs
index ee3b7dad6..bd9668d80 100644
--- a/MediaBrowser.Common/Net/MimeTypes.cs
+++ b/MediaBrowser.Common/Net/MimeTypes.cs
@@ -203,6 +203,10 @@ namespace MediaBrowser.Common.Net
{
return "application/x-javascript";
}
+ if (ext.Equals(".json", StringComparison.OrdinalIgnoreCase))
+ {
+ return JsonMimeType;
+ }
if (ext.Equals(".map", StringComparison.OrdinalIgnoreCase))
{
return "application/x-javascript";
diff --git a/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj b/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj
index 94e3575a1..9263a3187 100644
--- a/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj
+++ b/MediaBrowser.MediaEncoding/MediaBrowser.MediaEncoding.csproj
@@ -61,6 +61,7 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Subtitles\ISubtitleParser.cs" />
<Compile Include="Subtitles\ISubtitleWriter.cs" />
+ <Compile Include="Subtitles\JsonWriter.cs" />
<Compile Include="Subtitles\SrtParser.cs" />
<Compile Include="Subtitles\SrtWriter.cs" />
<Compile Include="Subtitles\AssParser.cs" />
diff --git a/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs b/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs
new file mode 100644
index 000000000..a4fc5d795
--- /dev/null
+++ b/MediaBrowser.MediaEncoding/Subtitles/JsonWriter.cs
@@ -0,0 +1,27 @@
+using MediaBrowser.Model.Serialization;
+using System.IO;
+using System.Text;
+using System.Threading;
+
+namespace MediaBrowser.MediaEncoding.Subtitles
+{
+ public class JsonWriter : ISubtitleWriter
+ {
+ private readonly IJsonSerializer _json;
+
+ public JsonWriter(IJsonSerializer json)
+ {
+ _json = json;
+ }
+
+ public void Write(SubtitleTrackInfo info, Stream stream, CancellationToken cancellationToken)
+ {
+ using (var writer = new StreamWriter(stream, Encoding.UTF8, 1024, true))
+ {
+ var json = _json.SerializeToString(info);
+
+ writer.Write(json);
+ }
+ }
+ }
+}
diff --git a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
index c083cad4e..1e839c5a3 100644
--- a/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
+++ b/MediaBrowser.MediaEncoding/Subtitles/SubtitleEncoder.cs
@@ -7,6 +7,7 @@ using MediaBrowser.Controller.MediaEncoding;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.Logging;
using MediaBrowser.Model.MediaInfo;
+using MediaBrowser.Model.Serialization;
using System;
using System.Collections.Concurrent;
using System.Diagnostics;
@@ -26,14 +27,16 @@ namespace MediaBrowser.MediaEncoding.Subtitles
private readonly IApplicationPaths _appPaths;
private readonly IFileSystem _fileSystem;
private readonly IMediaEncoder _mediaEncoder;
+ private readonly IJsonSerializer _json;
- public SubtitleEncoder(ILibraryManager libraryManager, ILogger logger, IApplicationPaths appPaths, IFileSystem fileSystem, IMediaEncoder mediaEncoder)
+ public SubtitleEncoder(ILibraryManager libraryManager, ILogger logger, IApplicationPaths appPaths, IFileSystem fileSystem, IMediaEncoder mediaEncoder, IJsonSerializer json)
{
_libraryManager = libraryManager;
_logger = logger;
_appPaths = appPaths;
_fileSystem = fileSystem;
_mediaEncoder = mediaEncoder;
+ _json = json;
}
private string SubtitleCachePath
@@ -263,6 +266,10 @@ namespace MediaBrowser.MediaEncoding.Subtitles
throw new ArgumentNullException("format");
}
+ if (string.Equals(format, "json", StringComparison.OrdinalIgnoreCase))
+ {
+ return new JsonWriter(_json);
+ }
if (string.Equals(format, SubtitleFormat.SRT, StringComparison.OrdinalIgnoreCase))
{
return new SrtWriter();
diff --git a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs b/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs
index 1be4eca23..a719e8be2 100644
--- a/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs
+++ b/MediaBrowser.Server.Implementations/Session/HttpSessionController.cs
@@ -54,7 +54,7 @@ namespace MediaBrowser.Server.Implementations.Session
{
get
{
- return (DateTime.UtcNow - Session.LastActivityDate).TotalMinutes <= 10;
+ return (DateTime.UtcNow - Session.LastActivityDate).TotalMinutes <= 20;
}
}
diff --git a/MediaBrowser.ServerApplication/ApplicationHost.cs b/MediaBrowser.ServerApplication/ApplicationHost.cs
index 35ee580b5..00cefdb22 100644
--- a/MediaBrowser.ServerApplication/ApplicationHost.cs
+++ b/MediaBrowser.ServerApplication/ApplicationHost.cs
@@ -535,7 +535,7 @@ namespace MediaBrowser.ServerApplication
RegisterSingleInstance<ISessionContext>(new SessionContext(UserManager, authContext, SessionManager));
RegisterSingleInstance<IAuthService>(new AuthService(UserManager, SessionManager, authContext, ServerConfigurationManager));
- RegisterSingleInstance<ISubtitleEncoder>(new SubtitleEncoder(LibraryManager, LogManager.GetLogger("SubtitleEncoder"), ApplicationPaths, FileSystemManager, MediaEncoder));
+ RegisterSingleInstance<ISubtitleEncoder>(new SubtitleEncoder(LibraryManager, LogManager.GetLogger("SubtitleEncoder"), ApplicationPaths, FileSystemManager, MediaEncoder, JsonSerializer));
var displayPreferencesTask = Task.Run(async () => await ConfigureDisplayPreferencesRepositories().ConfigureAwait(false));
var itemsTask = Task.Run(async () => await ConfigureItemRepositories().ConfigureAwait(false));