From 8b7effd6ff1694688e93d03a48c5dcddb4efe4f0 Mon Sep 17 00:00:00 2001 From: LukePulverenti Luke Pulverenti luke pulverenti Date: Tue, 18 Sep 2012 15:33:57 -0400 Subject: Moved discovery of loggers and weather providers to MEF. Also added support for third-party image processors, also discovered through MEF. --- MediaBrowser.Api/HttpHandlers/ImageHandler.cs | 94 +++++++++++++++++---------- 1 file changed, 59 insertions(+), 35 deletions(-) (limited to 'MediaBrowser.Api/HttpHandlers/ImageHandler.cs') diff --git a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs index f73f783af..73098c71b 100644 --- a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs @@ -2,6 +2,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Common.Net.Handlers; using MediaBrowser.Controller; +using MediaBrowser.Controller.Drawing; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Entities; using System; @@ -20,7 +21,7 @@ namespace MediaBrowser.Api.HttpHandlers { return ApiService.IsApiUrlMatch("image", request); } - + private string _imagePath; private async Task GetImagePath() { @@ -29,49 +30,57 @@ namespace MediaBrowser.Api.HttpHandlers return _imagePath; } - private async Task DiscoverImagePath() + private BaseEntity _sourceEntity; + private async Task GetSourceEntity() { - string personName = QueryString["personname"]; - - if (!string.IsNullOrEmpty(personName)) + if (_sourceEntity == null) { - return (await Kernel.Instance.ItemController.GetPerson(personName).ConfigureAwait(false)).PrimaryImagePath; - } + if (!string.IsNullOrEmpty(QueryString["personname"])) + { + _sourceEntity = await Kernel.Instance.ItemController.GetPerson(QueryString["personname"]).ConfigureAwait(false); + } - string genreName = QueryString["genre"]; + else if (!string.IsNullOrEmpty(QueryString["genre"])) + { + _sourceEntity = await Kernel.Instance.ItemController.GetGenre(QueryString["genre"]).ConfigureAwait(false); + } - if (!string.IsNullOrEmpty(genreName)) - { - return (await Kernel.Instance.ItemController.GetGenre(genreName).ConfigureAwait(false)).PrimaryImagePath; - } + else if (!string.IsNullOrEmpty(QueryString["year"])) + { + _sourceEntity = await Kernel.Instance.ItemController.GetYear(int.Parse(QueryString["year"])).ConfigureAwait(false); + } - string year = QueryString["year"]; + else if (!string.IsNullOrEmpty(QueryString["studio"])) + { + _sourceEntity = await Kernel.Instance.ItemController.GetStudio(QueryString["studio"]).ConfigureAwait(false); + } - if (!string.IsNullOrEmpty(year)) - { - return (await Kernel.Instance.ItemController.GetYear(int.Parse(year)).ConfigureAwait(false)).PrimaryImagePath; + else if (!string.IsNullOrEmpty(QueryString["userid"])) + { + _sourceEntity = ApiService.GetUserById(QueryString["userid"], false); + } + + else + { + _sourceEntity = ApiService.GetItemById(QueryString["id"]); + } } - string studio = QueryString["studio"]; + return _sourceEntity; + } - if (!string.IsNullOrEmpty(studio)) - { - return (await Kernel.Instance.ItemController.GetStudio(studio).ConfigureAwait(false)).PrimaryImagePath; - } + private async Task DiscoverImagePath() + { + var entity = await GetSourceEntity().ConfigureAwait(false); - string userId = QueryString["userid"]; + var item = entity as BaseItem; - if (!string.IsNullOrEmpty(userId)) + if (item != null) { - return ApiService.GetUserById(userId, false).PrimaryImagePath; + return GetImagePathFromTypes(item, ImageType, ImageIndex); } - BaseItem item = ApiService.GetItemById(QueryString["id"]); - - string imageIndex = QueryString["index"]; - int index = string.IsNullOrEmpty(imageIndex) ? 0 : int.Parse(imageIndex); - - return GetImagePathFromTypes(item, ImageType, index); + return entity.PrimaryImagePath; } private Stream _sourceStream; @@ -114,8 +123,6 @@ namespace MediaBrowser.Api.HttpHandlers public async override Task GetContentType() { - await EnsureSourceStream().ConfigureAwait(false); - if (await GetSourceStream().ConfigureAwait(false) == null) { return null; @@ -134,8 +141,6 @@ namespace MediaBrowser.Api.HttpHandlers protected async override Task GetLastDateModified() { - await EnsureSourceStream().ConfigureAwait(false); - if (await GetSourceStream().ConfigureAwait(false) == null) { return null; @@ -144,6 +149,21 @@ namespace MediaBrowser.Api.HttpHandlers return File.GetLastWriteTimeUtc(await GetImagePath().ConfigureAwait(false)); } + private int ImageIndex + { + get + { + string val = QueryString["index"]; + + if (string.IsNullOrEmpty(val)) + { + return 0; + } + + return int.Parse(val); + } + } + private int? Height { get @@ -236,7 +256,11 @@ namespace MediaBrowser.Api.HttpHandlers protected override async Task WriteResponseToOutputStream(Stream stream) { - ImageProcessor.ProcessImage(await GetSourceStream().ConfigureAwait(false), stream, Width, Height, MaxWidth, MaxHeight, Quality); + Stream sourceStream = await GetSourceStream().ConfigureAwait(false); + + var entity = await GetSourceEntity().ConfigureAwait(false); + + ImageProcessor.ProcessImage(sourceStream, stream, Width, Height, MaxWidth, MaxHeight, Quality, entity, ImageType, ImageIndex); } private string GetImagePathFromTypes(BaseItem item, ImageType imageType, int imageIndex) -- cgit v1.2.3