fixes #518 - Add api param for watched indicator on images
This commit is contained in:
parent
9e91e3b2dd
commit
c233f2190c
|
@ -175,6 +175,7 @@ namespace MediaBrowser.Api.DefaultTheme
|
||||||
var dtos = FilterItemsForBackdropDisplay(seriesWithBackdrops)
|
var dtos = FilterItemsForBackdropDisplay(seriesWithBackdrops)
|
||||||
.OrderBy(i => Guid.NewGuid())
|
.OrderBy(i => Guid.NewGuid())
|
||||||
.Take(50)
|
.Take(50)
|
||||||
|
.AsParallel()
|
||||||
.Select(i => _dtoService.GetBaseItemDto(i, fields, user));
|
.Select(i => _dtoService.GetBaseItemDto(i, fields, user));
|
||||||
|
|
||||||
view.SpotlightItems = dtos.ToArray();
|
view.SpotlightItems = dtos.ToArray();
|
||||||
|
|
|
@ -55,12 +55,16 @@ namespace MediaBrowser.Api.Images
|
||||||
|
|
||||||
[ApiMember(Name = "Format", Description = "Determines the output foramt of the image - original,gif,jpg,png", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
[ApiMember(Name = "Format", Description = "Determines the output foramt of the image - original,gif,jpg,png", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
||||||
public ImageOutputFormat Format { get; set; }
|
public ImageOutputFormat Format { get; set; }
|
||||||
|
|
||||||
|
[ApiMember(Name = "Indicator", Description = "Determines what overlay to render, if any. none, watched.", IsRequired = false, DataType = "bool", ParameterType = "query", Verb = "GET")]
|
||||||
|
public ImageOverlay Indicator { get; set; }
|
||||||
|
|
||||||
public ImageRequest()
|
public ImageRequest()
|
||||||
{
|
{
|
||||||
EnableImageEnhancers = true;
|
EnableImageEnhancers = true;
|
||||||
|
|
||||||
Format = ImageOutputFormat.Original;
|
Format = ImageOutputFormat.Original;
|
||||||
|
Indicator = ImageOverlay.None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -747,7 +747,7 @@ namespace MediaBrowser.Api.Images
|
||||||
throw new ResourceNotFoundException(string.Format("File not found: {0}", imagePath));
|
throw new ResourceNotFoundException(string.Format("File not found: {0}", imagePath));
|
||||||
}
|
}
|
||||||
|
|
||||||
var contentType = MimeTypes.GetMimeType(imagePath);
|
var contentType = GetMimeType(request.Format, imagePath);
|
||||||
|
|
||||||
var cacheGuid = _imageProcessor.GetImageCacheTag(item, request.Type, imagePath, originalFileImageDateModified, supportedImageEnhancers);
|
var cacheGuid = _imageProcessor.GetImageCacheTag(item, request.Type, imagePath, originalFileImageDateModified, supportedImageEnhancers);
|
||||||
|
|
||||||
|
@ -774,6 +774,28 @@ namespace MediaBrowser.Api.Images
|
||||||
}, contentType);
|
}, contentType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetMimeType(ImageOutputFormat format, string path)
|
||||||
|
{
|
||||||
|
if (format == ImageOutputFormat.Bmp)
|
||||||
|
{
|
||||||
|
return MimeTypes.GetMimeType("i.bmp");
|
||||||
|
}
|
||||||
|
if (format == ImageOutputFormat.Gif)
|
||||||
|
{
|
||||||
|
return MimeTypes.GetMimeType("i.gif");
|
||||||
|
}
|
||||||
|
if (format == ImageOutputFormat.Jpg)
|
||||||
|
{
|
||||||
|
return MimeTypes.GetMimeType("i.jpg");
|
||||||
|
}
|
||||||
|
if (format == ImageOutputFormat.Png)
|
||||||
|
{
|
||||||
|
return MimeTypes.GetMimeType("i.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
return MimeTypes.GetMimeType(path);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the image path.
|
/// Gets the image path.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -89,7 +89,8 @@ namespace MediaBrowser.Api.Images
|
||||||
OriginalImagePath = OriginalImagePath,
|
OriginalImagePath = OriginalImagePath,
|
||||||
Quality = Request.Quality,
|
Quality = Request.Quality,
|
||||||
Width = Request.Width,
|
Width = Request.Width,
|
||||||
OutputFormat = Request.Format
|
OutputFormat = Request.Format,
|
||||||
|
Indicator = Request.Indicator
|
||||||
};
|
};
|
||||||
|
|
||||||
return ImageProcessor.ProcessImage(options, responseStream);
|
return ImageProcessor.ProcessImage(options, responseStream);
|
||||||
|
|
|
@ -33,6 +33,8 @@ namespace MediaBrowser.Controller.Drawing
|
||||||
public List<IImageEnhancer> Enhancers { get; set; }
|
public List<IImageEnhancer> Enhancers { get; set; }
|
||||||
|
|
||||||
public ImageOutputFormat OutputFormat { get; set; }
|
public ImageOutputFormat OutputFormat { get; set; }
|
||||||
|
|
||||||
|
public ImageOverlay Indicator { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum ImageOutputFormat
|
public enum ImageOutputFormat
|
||||||
|
@ -43,4 +45,10 @@ namespace MediaBrowser.Controller.Drawing
|
||||||
Jpg,
|
Jpg,
|
||||||
Png
|
Png
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum ImageOverlay
|
||||||
|
{
|
||||||
|
None,
|
||||||
|
Watched
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,7 +109,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
|
|
||||||
var quality = options.Quality ?? 90;
|
var quality = options.Quality ?? 90;
|
||||||
|
|
||||||
var cacheFilePath = GetCacheFilePath(originalImagePath, newSize, quality, dateModified, options.OutputFormat);
|
var cacheFilePath = GetCacheFilePath(originalImagePath, newSize, quality, dateModified, options.OutputFormat, options.Indicator);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
@ -175,6 +175,8 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
|
|
||||||
thumbnailGraph.DrawImage(originalImage, 0, 0, newWidth, newHeight);
|
thumbnailGraph.DrawImage(originalImage, 0, 0, newWidth, newHeight);
|
||||||
|
|
||||||
|
DrawIndicator(thumbnailGraph, newWidth, newHeight, options.Indicator);
|
||||||
|
|
||||||
var outputFormat = GetOutputFormat(originalImage, options.OutputFormat);
|
var outputFormat = GetOutputFormat(originalImage, options.OutputFormat);
|
||||||
|
|
||||||
using (var outputMemoryStream = new MemoryStream())
|
using (var outputMemoryStream = new MemoryStream())
|
||||||
|
@ -204,6 +206,20 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private WatchedIndicatorDrawer _watchedDrawer;
|
||||||
|
|
||||||
|
private void DrawIndicator(Graphics graphics, int imageWidth, int imageHeight, ImageOverlay indicator)
|
||||||
|
{
|
||||||
|
if (indicator == ImageOverlay.Watched)
|
||||||
|
{
|
||||||
|
_watchedDrawer = _watchedDrawer ?? (_watchedDrawer = new WatchedIndicatorDrawer());
|
||||||
|
|
||||||
|
var currentImageSize = new Size(imageWidth, imageHeight);
|
||||||
|
|
||||||
|
_watchedDrawer.Process(graphics, currentImageSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the output format.
|
/// Gets the output format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -322,12 +338,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the cache file path based on a set of parameters
|
/// Gets the cache file path based on a set of parameters
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="originalPath">The path to the original image file</param>
|
private string GetCacheFilePath(string originalPath, ImageSize outputSize, int quality, DateTime dateModified, ImageOutputFormat format, ImageOverlay overlay)
|
||||||
/// <param name="outputSize">The size to output the image in</param>
|
|
||||||
/// <param name="quality">Quality level, from 0-100. Currently only applies to JPG. The default value should suffice.</param>
|
|
||||||
/// <param name="dateModified">The last modified date of the image</param>
|
|
||||||
/// <returns>System.String.</returns>
|
|
||||||
private string GetCacheFilePath(string originalPath, ImageSize outputSize, int quality, DateTime dateModified, ImageOutputFormat format)
|
|
||||||
{
|
{
|
||||||
var filename = originalPath;
|
var filename = originalPath;
|
||||||
|
|
||||||
|
@ -344,6 +355,11 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
filename += "format=" + format;
|
filename += "format=" + format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (overlay != ImageOverlay.None)
|
||||||
|
{
|
||||||
|
filename += "overlay=" + overlay;
|
||||||
|
}
|
||||||
|
|
||||||
return GetCachePath(_resizedImageCachePath, filename, Path.GetExtension(originalPath));
|
return GetCachePath(_resizedImageCachePath, filename, Path.GetExtension(originalPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -506,7 +522,7 @@ namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
return string.Join("|", cacheKeys.ToArray()).GetMD5();
|
return string.Join("|", cacheKeys.ToArray()).GetMD5();
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<Tuple<string,DateTime>> GetEnhancedImage(string originalImagePath, DateTime dateModified, BaseItem item,
|
private async Task<Tuple<string, DateTime>> GetEnhancedImage(string originalImagePath, DateTime dateModified, BaseItem item,
|
||||||
ImageType imageType, int imageIndex,
|
ImageType imageType, int imageIndex,
|
||||||
List<IImageEnhancer> enhancers)
|
List<IImageEnhancer> enhancers)
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
using System.Drawing;
|
||||||
|
|
||||||
|
namespace MediaBrowser.Server.Implementations.Drawing
|
||||||
|
{
|
||||||
|
public class WatchedIndicatorDrawer
|
||||||
|
{
|
||||||
|
private const int IndicatorHeight = 50;
|
||||||
|
private const int FontSize = 50;
|
||||||
|
|
||||||
|
public void Process(Graphics graphics, Size imageSize)
|
||||||
|
{
|
||||||
|
var x = imageSize.Width - IndicatorHeight;
|
||||||
|
|
||||||
|
using (var backdroundBrush = new SolidBrush(Color.FromArgb(225, 204, 51, 51)))
|
||||||
|
{
|
||||||
|
graphics.FillRectangle(backdroundBrush, x, 0, IndicatorHeight, IndicatorHeight);
|
||||||
|
|
||||||
|
const string text = "a";
|
||||||
|
|
||||||
|
x = imageSize.Width - 55;
|
||||||
|
|
||||||
|
using (var font = new Font("Webdings", FontSize, FontStyle.Regular, GraphicsUnit.Pixel))
|
||||||
|
{
|
||||||
|
using (var fontBrush = new SolidBrush(Color.White))
|
||||||
|
{
|
||||||
|
graphics.DrawString(text, font, fontBrush, x, -2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -114,6 +114,7 @@
|
||||||
<Compile Include="BdInfo\BdInfoExaminer.cs" />
|
<Compile Include="BdInfo\BdInfoExaminer.cs" />
|
||||||
<Compile Include="Configuration\ServerConfigurationManager.cs" />
|
<Compile Include="Configuration\ServerConfigurationManager.cs" />
|
||||||
<Compile Include="Drawing\ImageHeader.cs" />
|
<Compile Include="Drawing\ImageHeader.cs" />
|
||||||
|
<Compile Include="Drawing\WatchedIndicatorDrawer.cs" />
|
||||||
<Compile Include="Dto\DtoService.cs" />
|
<Compile Include="Dto\DtoService.cs" />
|
||||||
<Compile Include="EntryPoints\LibraryChangedNotifier.cs" />
|
<Compile Include="EntryPoints\LibraryChangedNotifier.cs" />
|
||||||
<Compile Include="EntryPoints\LoadRegistrations.cs" />
|
<Compile Include="EntryPoints\LoadRegistrations.cs" />
|
||||||
|
|
Loading…
Reference in New Issue
Block a user