using MediaBrowser.Common.Logging; using MediaBrowser.Controller.Entities; using MediaBrowser.Model.Drawing; using MediaBrowser.Model.Entities; using MediaBrowser.Model.Logging; using System; using System.Drawing; using System.Threading.Tasks; namespace MediaBrowser.Controller.Providers { /// /// Class BaseImageEnhancer /// public abstract class BaseImageEnhancer : IDisposable { /// /// The logger /// private static readonly ILogger Logger = LogManager.GetLogger("ImageEnhancer"); /// /// Return true only if the given image for the given item will be enhanced by this enhancer. /// /// The item. /// Type of the image. /// true if this enhancer will enhance the supplied image for the supplied item, false otherwise public abstract bool Supports(BaseItem item, ImageType imageType); /// /// Gets the priority or order in which this enhancer should be run. /// /// The priority. public abstract MetadataProviderPriority Priority { get; } /// /// Return the date of the last configuration change affecting the provided baseitem and image type /// /// The item. /// Type of the image. /// Date of last config change public virtual DateTime LastConfigurationChange(BaseItem item, ImageType imageType) { return DateTime.MinValue; } /// /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. protected virtual void Dispose(bool dispose) { } /// /// Gets the size of the enhanced image. /// /// The item. /// Type of the image. /// Index of the image. /// Size of the original image. /// ImageSize. public virtual ImageSize GetEnhancedImageSize(BaseItem item, ImageType imageType, int imageIndex, ImageSize originalImageSize) { return originalImageSize; } /// /// Enhances the supplied image and returns it /// /// The item. /// The original image. /// Type of the image. /// Index of the image. /// Task{System.Drawing.Image}. protected abstract Task EnhanceImageAsyncInternal(BaseItem item, Image originalImage, ImageType imageType, int imageIndex); /// /// Enhances the image async. /// /// The item. /// The original image. /// Type of the image. /// Index of the image. /// Task{Image}. /// public async Task EnhanceImageAsync(BaseItem item, Image originalImage, ImageType imageType, int imageIndex) { if (item == null || originalImage == null) { throw new ArgumentNullException(); } var typeName = GetType().Name; Logger.Debug("Running {0} for {1}", typeName, item.Path ?? item.Name ?? "--Unknown--"); try { return await EnhanceImageAsyncInternal(item, originalImage, imageType, imageIndex).ConfigureAwait(false); } catch (Exception ex) { Logger.ErrorException("{0} failed enhancing {1}", ex, typeName, item.Name); throw; } } } }