aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/HttpHandlers/ItemHandler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/HttpHandlers/ItemHandler.cs')
-rw-r--r--MediaBrowser.Api/HttpHandlers/ItemHandler.cs93
1 files changed, 93 insertions, 0 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/ItemHandler.cs b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs
new file mode 100644
index 000000000..40824bd2c
--- /dev/null
+++ b/MediaBrowser.Api/HttpHandlers/ItemHandler.cs
@@ -0,0 +1,93 @@
+using MediaBrowser.Controller.Net;
+using System;
+using System.IO;
+using System.IO.Compression;
+using MediaBrowser.Common.Json;
+using MediaBrowser.Model.Entities;
+using MediaBrowser.Controller;
+
+namespace MediaBrowser.Api.HttpHandlers
+{
+ public class ItemHandler : Response
+ {
+ public ItemHandler(RequestContext ctx)
+ : base(ctx)
+ {
+ ContentType = "application/json";
+
+ Headers["Content-Encoding"] = "gzip";
+
+ WriteStream = s =>
+ {
+ WriteReponse(s);
+ s.Close();
+ };
+ }
+
+ private Guid ItemId
+ {
+ get
+ {
+ string id = RequestContext.Request.QueryString["id"];
+
+ if (string.IsNullOrEmpty(id))
+ {
+ return Guid.Empty;
+ }
+
+ return Guid.Parse(id);
+ }
+ }
+
+ BaseItem Item
+ {
+ get
+ {
+ Guid id = ItemId;
+
+ if (id == Guid.Empty)
+ {
+ return Kernel.Instance.RootFolder;
+ }
+
+ return Kernel.Instance.RootFolder.FindById(id);
+ }
+ }
+
+ private void WriteReponse(Stream stream)
+ {
+ BaseItem item = Item;
+
+ object returnObject;
+
+ Folder folder = item as Folder;
+
+ if (folder != null)
+ {
+ returnObject = new
+ {
+ Item = item,
+ Children = folder.Children
+ };
+ }
+ else
+ {
+ returnObject = new
+ {
+ Item = item
+ };
+ }
+
+ WriteJsonResponse(returnObject, stream);
+ }
+
+ private void WriteJsonResponse(object obj, Stream stream)
+ {
+ using (GZipStream gzipStream = new GZipStream(stream, CompressionMode.Compress, false))
+ {
+ JsonSerializer.Serialize(obj, gzipStream);
+ //gzipStream.Flush();
+ }
+ }
+ }
+}