You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jellyfin/MediaBrowser.Api/HttpHandlers/ItemHandler.cs

94 lines
2.2 KiB

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();
}
}
}
}