// ----------------------------------------------------------------------- // // Copyright (c) James South. // Licensed under the Apache License, Version 2.0. // // ----------------------------------------------------------------------- namespace ImageProcessor.Web { #region Using using System.Collections.Generic; using System.Linq; using ImageProcessor.Processors; using ImageProcessor.Web.Config; #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 current instance of the class. /// public static ImageFactory AutoProcess(this ImageFactory factory) { 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 querystring. List graphicsProcessors = ImageProcessorConfig.Instance.GraphicsProcessors .Where(x => x.MatchRegexIndex(factory.QueryString) != int.MaxValue) .OrderBy(y => y.SortOrder) .ToList(); // Loop through and process the image. foreach (IGraphicsProcessor graphicsProcessor in graphicsProcessors) { factory.Image = graphicsProcessor.ProcessImage(factory); } } } return factory; } } }