diff options
Diffstat (limited to 'MediaBrowser.Api/Images/ImageService.cs')
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 63 |
1 files changed, 49 insertions, 14 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index deaefe019..30db91da8 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -535,9 +535,6 @@ namespace MediaBrowser.Api.Images throw new ResourceNotFoundException(string.Format("{0} does not have an image of type {1}", item.Name, request.Type)); } - // See if we can avoid a file system lookup by looking for the file in ResolveArgs - var originalFileImageDateModified = imageInfo.DateModified; - var supportedImageEnhancers = request.EnableImageEnhancers ? _imageProcessor.ImageEnhancers.Where(i => { try @@ -564,25 +561,59 @@ namespace MediaBrowser.Api.Images cacheDuration = TimeSpan.FromDays(365); } - // Avoid implicitly captured closure - var currentItem = item; - var currentRequest = request; - var responseHeaders = new Dictionary<string, string> { {"transferMode.dlna.org", "Interactive"}, {"realTimeInfo.dlna.org", "DLNA.ORG_TLAG=*"} }; - return ToCachedResult(cacheGuid, originalFileImageDateModified, cacheDuration, () => new ImageWriter + return GetImageResult(item, + request, + imageInfo, + supportedImageEnhancers, + contentType, + cacheDuration, + responseHeaders) + .Result; + } + + private async Task<object> GetImageResult(IHasImages item, + ImageRequest request, + ItemImageInfo image, + List<IImageEnhancer> enhancers, + string contentType, + TimeSpan? cacheDuration, + IDictionary<string,string> headers) + { + var cropwhitespace = request.Type == ImageType.Logo || request.Type == ImageType.Art; + + if (request.CropWhitespace.HasValue) { - Item = currentItem, - Request = currentRequest, - Enhancers = supportedImageEnhancers, - Image = imageInfo, - ImageProcessor = _imageProcessor + cropwhitespace = request.CropWhitespace.Value; + } - }, contentType, responseHeaders); + var options = new ImageProcessingOptions + { + CropWhiteSpace = cropwhitespace, + Enhancers = enhancers, + Height = request.Height, + ImageIndex = request.Index ?? 0, + Image = image, + Item = item, + MaxHeight = request.MaxHeight, + MaxWidth = request.MaxWidth, + Quality = request.Quality, + Width = request.Width, + OutputFormat = request.Format, + AddPlayedIndicator = request.AddPlayedIndicator, + PercentPlayed = request.PercentPlayed, + UnplayedCount = request.UnplayedCount, + BackgroundColor = request.BackgroundColor + }; + + var file = await _imageProcessor.ProcessImage(options).ConfigureAwait(false); + + return ResultFactory.GetStaticFileResult(Request, file, contentType, cacheDuration, FileShare.Read, headers); } private string GetMimeType(ImageOutputFormat format, string path) @@ -603,6 +634,10 @@ namespace MediaBrowser.Api.Images { return Common.Net.MimeTypes.GetMimeType("i.png"); } + if (format == ImageOutputFormat.Webp) + { + return Common.Net.MimeTypes.GetMimeType("i.webp"); + } return Common.Net.MimeTypes.GetMimeType(path); } |
