aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs')
-rw-r--r--MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs224
1 files changed, 134 insertions, 90 deletions
diff --git a/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs
index 53b3ee817..293cb6e98 100644
--- a/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs
+++ b/MediaBrowser.Common/Net/Handlers/BaseSerializationHandler.cs
@@ -1,90 +1,134 @@
-using MediaBrowser.Common.Serialization;
-using System;
-using System.IO;
-using System.Threading.Tasks;
-
-namespace MediaBrowser.Common.Net.Handlers
-{
- public abstract class BaseSerializationHandler<T> : BaseHandler
- where T : class
- {
- public SerializationFormat SerializationFormat
- {
- get
- {
- string format = QueryString["dataformat"];
-
- if (string.IsNullOrEmpty(format))
- {
- return SerializationFormat.Json;
- }
-
- return (SerializationFormat)Enum.Parse(typeof(SerializationFormat), format, true);
- }
- }
-
- protected string ContentType
- {
- get
- {
- switch (SerializationFormat)
- {
- case SerializationFormat.Jsv:
- return "text/plain";
- case SerializationFormat.Protobuf:
- return "application/x-protobuf";
- default:
- return MimeTypes.JsonMimeType;
- }
- }
- }
-
- protected override async Task<ResponseInfo> GetResponseInfo()
- {
- ResponseInfo info = new ResponseInfo
- {
- ContentType = ContentType
- };
-
- _objectToSerialize = await GetObjectToSerialize().ConfigureAwait(false);
-
- if (_objectToSerialize == null)
- {
- info.StatusCode = 404;
- }
-
- return info;
- }
-
- private T _objectToSerialize;
-
- protected abstract Task<T> GetObjectToSerialize();
-
- protected override Task WriteResponseToOutputStream(Stream stream)
- {
- return Task.Run(() =>
- {
- switch (SerializationFormat)
- {
- case SerializationFormat.Jsv:
- JsvSerializer.SerializeToStream(_objectToSerialize, stream);
- break;
- case SerializationFormat.Protobuf:
- ProtobufSerializer.SerializeToStream(_objectToSerialize, stream);
- break;
- default:
- JsonSerializer.SerializeToStream(_objectToSerialize, stream);
- break;
- }
- });
- }
- }
-
- public enum SerializationFormat
- {
- Json,
- Jsv,
- Protobuf
- }
-
-}
+using MediaBrowser.Common.Extensions;
+using MediaBrowser.Common.Kernel;
+using MediaBrowser.Common.Serialization;
+using System;
+using System.IO;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Common.Net.Handlers
+{
+ /// <summary>
+ /// Class BaseSerializationHandler
+ /// </summary>
+ /// <typeparam name="TKernelType">The type of the T kernel type.</typeparam>
+ /// <typeparam name="T"></typeparam>
+ public abstract class BaseSerializationHandler<TKernelType, T> : BaseHandler<TKernelType>
+ where TKernelType : IKernel
+ where T : class
+ {
+ /// <summary>
+ /// Gets the serialization format.
+ /// </summary>
+ /// <value>The serialization format.</value>
+ public SerializationFormat SerializationFormat
+ {
+ get
+ {
+ var format = QueryString["dataformat"];
+
+ if (string.IsNullOrEmpty(format))
+ {
+ return SerializationFormat.Json;
+ }
+
+ return (SerializationFormat)Enum.Parse(typeof(SerializationFormat), format, true);
+ }
+ }
+
+ /// <summary>
+ /// Gets the type of the content.
+ /// </summary>
+ /// <value>The type of the content.</value>
+ protected string ContentType
+ {
+ get
+ {
+ switch (SerializationFormat)
+ {
+ case SerializationFormat.Protobuf:
+ return "application/x-protobuf";
+ default:
+ return MimeTypes.JsonMimeType;
+ }
+ }
+ }
+
+ /// <summary>
+ /// Gets the response info.
+ /// </summary>
+ /// <returns>Task{ResponseInfo}.</returns>
+ protected override Task<ResponseInfo> GetResponseInfo()
+ {
+ return Task.FromResult(new ResponseInfo
+ {
+ ContentType = ContentType
+ });
+ }
+
+ /// <summary>
+ /// Called when [processing request].
+ /// </summary>
+ /// <param name="responseInfo">The response info.</param>
+ /// <returns>Task.</returns>
+ protected override async Task OnProcessingRequest(ResponseInfo responseInfo)
+ {
+ _objectToSerialize = await GetObjectToSerialize().ConfigureAwait(false);
+
+ if (_objectToSerialize == null)
+ {
+ throw new ResourceNotFoundException();
+ }
+
+ await base.OnProcessingRequest(responseInfo).ConfigureAwait(false);
+ }
+
+ /// <summary>
+ /// The _object to serialize
+ /// </summary>
+ private T _objectToSerialize;
+
+ /// <summary>
+ /// Gets the object to serialize.
+ /// </summary>
+ /// <returns>Task{`0}.</returns>
+ protected abstract Task<T> GetObjectToSerialize();
+
+ /// <summary>
+ /// Writes the response to output stream.
+ /// </summary>
+ /// <param name="stream">The stream.</param>
+ /// <param name="responseInfo">The response info.</param>
+ /// <param name="contentLength">Length of the content.</param>
+ /// <returns>Task.</returns>
+ protected override Task WriteResponseToOutputStream(Stream stream, ResponseInfo responseInfo, long? contentLength)
+ {
+ return Task.Run(() =>
+ {
+ switch (SerializationFormat)
+ {
+ case SerializationFormat.Protobuf:
+ Kernel.ProtobufSerializer.SerializeToStream(_objectToSerialize, stream);
+ break;
+ default:
+ JsonSerializer.SerializeToStream(_objectToSerialize, stream);
+ break;
+ }
+ });
+ }
+ }
+
+ /// <summary>
+ /// Enum SerializationFormat
+ /// </summary>
+ public enum SerializationFormat
+ {
+ /// <summary>
+ /// The json
+ /// </summary>
+ Json,
+ /// <summary>
+ /// The protobuf
+ /// </summary>
+ Protobuf
+ }
+}