// -------------------------------------------------------------------------------------------------------------------- // // Copyright (c) James South. // Licensed under the Apache License, Version 2.0. // // // Extends the ImageFactory class to provide a fluent API. // // -------------------------------------------------------------------------------------------------------------------- namespace ImageProcessor.Web { #region Using using System.Collections.Generic; using System.Linq; using ImageProcessor.Web.Configuration; using ImageProcessor.Web.Processors; #endregion /// /// Extends the ImageFactory class to provide a fluent API. /// public static class ImageFactoryExtensions { /// /// The object to lock against. /// private static readonly object SyncRoot = new object(); /// /// Auto processes image files based on any query string parameters added to the image path. /// /// /// The current instance of the class /// that this method extends. /// /// The collection of querystring parameters to process. /// /// The current instance of the class. /// public static ImageFactory AutoProcess(this ImageFactory factory, string queryString) { if (factory.ShouldProcess) { // It's faster to lock and run through our activated list than to create new instances. lock (SyncRoot) { // Get a list of all graphics processors that have parsed and matched the query string. List graphicsProcessors = ImageProcessorConfiguration.Instance.GraphicsProcessors .Where(x => x.MatchRegexIndex(queryString) != int.MaxValue) .OrderBy(y => y.SortOrder) .ToList(); // Loop through and process the image. foreach (IWebGraphicsProcessor graphicsProcessor in graphicsProcessors) { factory.CurrentImageFormat.ApplyProcessor(graphicsProcessor.Processor.ProcessImage, factory); } } } return factory; } } }