From 2e03cb0916f69b324fe654f92f1642b21eb92005 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Sat, 14 Jul 2012 16:45:11 -0400 Subject: Improved loading performance even more by switching from XmlDocument to XmlReader. Also added more api improvements. --- .../Net/Handlers/BaseEmbeddedResourceHandler.cs | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs (limited to 'MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs') diff --git a/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs b/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs new file mode 100644 index 000000000..e64773f33 --- /dev/null +++ b/MediaBrowser.Common/Net/Handlers/BaseEmbeddedResourceHandler.cs @@ -0,0 +1,70 @@ +using System.IO; +using System.IO.Compression; +using System; + +namespace MediaBrowser.Common.Net.Handlers +{ + public abstract class BaseEmbeddedResourceHandler : Response + { + public BaseEmbeddedResourceHandler(RequestContext ctx, string resourcePath) + : base(ctx) + { + ResourcePath = resourcePath; + + Headers["Content-Encoding"] = "gzip"; + + WriteStream = s => + { + WriteReponse(s); + s.Close(); + }; + } + + protected string ResourcePath { get; set; } + + public override string ContentType + { + get + { + string extension = Path.GetExtension(ResourcePath); + + if (extension.EndsWith("jpeg", StringComparison.OrdinalIgnoreCase) || extension.EndsWith("jpg", StringComparison.OrdinalIgnoreCase)) + { + return "image/jpeg"; + } + else if (extension.EndsWith("png", StringComparison.OrdinalIgnoreCase)) + { + return "image/png"; + } + else if (extension.EndsWith("ico", StringComparison.OrdinalIgnoreCase)) + { + return "image/ico"; + } + else if (extension.EndsWith("js", StringComparison.OrdinalIgnoreCase)) + { + return "application/x-javascript"; + } + else if (extension.EndsWith("css", StringComparison.OrdinalIgnoreCase)) + { + return "text/css"; + } + else if (extension.EndsWith("html", StringComparison.OrdinalIgnoreCase)) + { + return "text/html; charset=utf-8"; + } + + return "text/plain; charset=utf-8"; + } + } + + private void WriteReponse(Stream stream) + { + using (GZipStream gzipStream = new GZipStream(stream, CompressionMode.Compress, false)) + { + GetEmbeddedResourceStream().CopyTo(gzipStream); + } + } + + protected abstract Stream GetEmbeddedResourceStream(); + } +} -- cgit v1.2.3