Skip to content

Commit

Permalink
Added logic for skipping specific files
Browse files Browse the repository at this point in the history
  • Loading branch information
devedse committed Jan 21, 2023
1 parent b984b9e commit 40badf4
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -240,5 +240,75 @@ public async Task CorrectlyOptimizesCompleteDirectoryAndDoesntSkipFailedFilesInP
Assert.Equal(1, results.Count(t => t.OptimizationResult == OptimizationResult.Failed));
}
}



[SkippableFact]
public async Task CorrectlyOptimizesCompleteDirectoryButDoesntOptimizePngIfConfigurationIsSetLikeThat()
{
var config = ConfigCreator.CreateTestConfig(false);
config.OptimizePng = false;

var testName = $"{nameof(FileProcessorTests)}_{nameof(CorrectlyOptimizesCompleteDirectoryButDoesntOptimizePngIfConfigurationIsSetLikeThat)}";
var fileNameFileProcessedStateRememberer = Path.Combine(FolderHelperMethods.Internal_AssemblyDirectory.Value, $"{testName}.txt");
var fileNameDirProcessedStateRememberer = Path.Combine(FolderHelperMethods.Internal_AssemblyDirectory.Value, $"{testName}-dir.txt");

string sampleDirToOptimize = FileProcessingTestsHelpers.PrepareTestOptimizeDir("SampleDirToOptimize", fileNameFileProcessedStateRememberer, fileNameDirProcessedStateRememberer, testName);

//Optimize first time
{
var rememberer = new FileProcessedStateRememberer(false, fileNameFileProcessedStateRememberer);
var dirRememberer = new DirProcessedStateRememberer(true, fileNameDirProcessedStateRememberer);
var fp = new DeveImageOptimizerProcessor(config, null, rememberer, dirRememberer);

var results = (await fp.ProcessDirectory(sampleDirToOptimize)).ToList();

Assert.Equal(4, results.Count);
Assert.Equal(3, results.Count(t => t.OptimizationResult == OptimizationResult.Success));
Assert.Equal(1, results.Count(t => t.OptimizationResult == OptimizationResult.Skipped));

foreach (var result in results.Where(t => t.OptimizationResult == OptimizationResult.Success))
{
Assert.True(result.OriginalSize > result.OptimizedSize);
}
}

//Optimize second time
{
var rememberer = new FileProcessedStateRememberer(false, fileNameFileProcessedStateRememberer);
var dirRememberer = new DirProcessedStateRememberer(true, fileNameDirProcessedStateRememberer);
var fp = new DeveImageOptimizerProcessor(config, null, rememberer, dirRememberer);

var results = (await fp.ProcessDirectory(sampleDirToOptimize)).ToList();

Assert.Equal(4, results.Count);
foreach (var result in results)
{
Assert.Equal(OptimizationResult.Skipped, result.OptimizationResult);
Assert.True(result.OriginalSize == result.OptimizedSize);
}
}

config.OptimizePng = true;

//Optimize third time with config changed
{
var rememberer = new FileProcessedStateRememberer(false, fileNameFileProcessedStateRememberer);
var dirRememberer = new DirProcessedStateRememberer(true, fileNameDirProcessedStateRememberer);
var fp = new DeveImageOptimizerProcessor(config, null, rememberer, dirRememberer);

var results = (await fp.ProcessDirectory(sampleDirToOptimize)).ToList();

Assert.Equal(4, results.Count);

Assert.Equal(3, results.Count(t => t.OptimizationResult == OptimizationResult.Skipped));
Assert.Equal(1, results.Count(t => t.OptimizationResult == OptimizationResult.Success));

foreach (var result in results.Where(t => t.OptimizationResult == OptimizationResult.Success))
{
Assert.True(result.OriginalSize > result.OptimizedSize);
}
}
}
}
}
33 changes: 32 additions & 1 deletion DeveImageOptimizer/ConstantsFileExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
using System.Linq;
using DeveImageOptimizer.FileProcessing;
using System.IO;
using System.Linq;
using static System.Net.Mime.MediaTypeNames;

namespace DeveImageOptimizer
{
Expand All @@ -14,5 +17,33 @@ static ConstantsFileExtensions()
{
AllValidExtensions = JPGExtensions.Concat(PNGExtensions).Concat(GIFExtensions).Concat(BMPExtensions).ToArray();
}

public static bool ShouldSkipBasedOnConfiguration(DeveImageOptimizerConfiguration configuration, string fileExtension)
{
var upperExt = fileExtension.ToUpper();

//Check skipping
switch (upperExt)
{
case var e when !configuration.OptimizeJpg && JPGExtensions.Contains(e.ToUpperInvariant()):
{
return true;
}
case var e when !configuration.OptimizePng && PNGExtensions.Contains(e.ToUpperInvariant()):
{
return true;
}
case var e when !configuration.OptimizeGif && GIFExtensions.Contains(e.ToUpperInvariant()):
{
return true;
}
case var e when !configuration.OptimizeBmp && BMPExtensions.Contains(e.ToUpperInvariant()):
{
return true;
}
}

return false;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,10 @@ public class DeveImageOptimizerConfiguration
/// Whether to do a Pixel by Pixel comparison after every optimization step. This is a real debug feature that should not be used normally.
/// </summary>
public bool VerifyImageAfterEveryOptimizationStep { get; set; } = false;

public bool OptimizePng { get; set; } = true;
public bool OptimizeJpg { get; set; } = true;
public bool OptimizeGif { get; set; } = true;
public bool OptimizeBmp { get; set; } = true;
}
}
10 changes: 10 additions & 0 deletions DeveImageOptimizer/FileProcessing/FileOptimizerProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;

namespace DeveImageOptimizer.FileProcessing
{
Expand All @@ -32,6 +34,14 @@ public async Task OptimizeFile(OptimizableFile file)
throw new FileOptimizerNotFoundException(Configuration.FileOptimizerPath);
}

var ext = Path.GetExtension(file.Path).ToUpperInvariant();
if (ConstantsFileExtensions.ShouldSkipBasedOnConfiguration(Configuration, ext))
{
Console.WriteLine($"=== Skipping image: {file.Path} due to extension '{ext}' being disabled in configuration ===");
file.SetSkipped();
return;
}

var w = Stopwatch.StartNew();

var tempFiles = new List<string>();
Expand Down

0 comments on commit 40badf4

Please sign in to comment.