Exemplo n.º 1
0
        public ImageDetail DeriveManipulatedImage(string relativePath, string originalExtension, Manipulation imageManipulation)
        {
            var derivedFileName = imageManipulation.GetDerivedFileName(relativePath);
            var mimeType        = GetMimeType(Path.GetExtension(relativePath));

            if (!String.IsNullOrWhiteSpace(originalExtension))
            {
                relativePath = ReplaceExtension(relativePath, originalExtension);
            }

            var originPath = Path.Combine(this.SourceDirectory, relativePath);

            if (System.IO.File.Exists(originPath))
            {
                var newFileDirectory = Path.Combine(this.DerivedDirectory, relativePath);
                var newFilePath      = Path.Combine(newFileDirectory, derivedFileName);

                var derivedFolderCreated = new DirectoryInfo(newFileDirectory).CreationTime;
                var originalFileModified = new FileInfo(originPath).LastWriteTime;

                if (Directory.Exists(newFileDirectory) && (originalFileModified > derivedFolderCreated))
                {
                    Directory.Delete(newFileDirectory, true);
                }

                if (File.Exists(newFilePath))
                {
                    return(new ImageDetail(newFilePath, mimeType));
                }

                if (!Directory.Exists(newFileDirectory))
                {
                    Directory.CreateDirectory(newFileDirectory);
                }

                imageManipulation.Manipulate(originPath, newFilePath);

                return(new ImageDetail(newFilePath, mimeType));
            }

            throw new FileNotFoundException();
        }