@@ -12,7 +12,7 @@ public class Compactor : ICompressor, IDisposable
1212{
1313
1414 private readonly string workingDirectory ;
15- private readonly string [ ] excludedFileExtensions ;
15+ private readonly HashSet < string > excludedFileExtensions ;
1616 private readonly WOFCompressionAlgorithm wofCompressionAlgorithm ;
1717
1818
@@ -27,7 +27,7 @@ public class Compactor : ICompressor, IDisposable
2727 public Compactor ( string folderPath , WOFCompressionAlgorithm compressionLevel , string [ ] excludedFileTypes )
2828 {
2929 workingDirectory = folderPath ;
30- excludedFileExtensions = excludedFileTypes ;
30+ excludedFileExtensions = new HashSet < string > ( excludedFileTypes ) ;
3131 wofCompressionAlgorithm = compressionLevel ;
3232
3333 InitializeCompressionInfoPointer ( ) ;
@@ -99,30 +99,28 @@ private async Task PauseAndProcessFile(FileDetails file, long totalFilesSize, Ca
9999 }
100100 }
101101
102- private async Task < IEnumerable < FileDetails > > BuildWorkingFilesList ( )
102+ public async Task < IEnumerable < FileDetails > > BuildWorkingFilesList ( )
103103 {
104104 uint clusterSize = SharedMethods . GetClusterSize ( workingDirectory ) ;
105105
106- var filesList = new ConcurrentBag < FileDetails > ( ) ;
107-
108106 var analyser = new Analyser ( workingDirectory ) ;
109107 var ret = await analyser . AnalyseFolder ( cancellationTokenSource . Token ) ;
110108
111- Parallel . ForEach ( analyser . FileCompressionDetailsList , ( fl ) =>
112- {
113- var ft = fl . FileInfo ;
114- if ( ( ! excludedFileExtensions . Contains ( ft ? . Extension ) || excludedFileExtensions . Contains ( fl . FileName ) )
115- && ft . Length > clusterSize
116- && fl . CompressionMode != wofCompressionAlgorithm )
117- {
118- filesList . Add ( new FileDetails { FileName = fl . FileName , UncompressedSize = fl . UncompressedSize } ) ;
119- }
120- } ) ;
109+ var filesList = analyser . FileCompressionDetailsList
110+ . Where ( fl =>
111+ fl . CompressionMode != wofCompressionAlgorithm
112+ && fl . UncompressedSize > clusterSize
113+ && ( ( fl . FileInfo != null && ! excludedFileExtensions . Contains ( fl . FileInfo . Extension ) ) || excludedFileExtensions . Contains ( fl . FileName ) )
114+ )
115+ . Select ( fl => new FileDetails ( fl . FileName , fl . UncompressedSize ) )
116+ . ToList ( ) ;
121117
122- return filesList . ToList ( ) ;
118+ return filesList ;
123119 }
124120
125121
122+
123+
126124 public void Pause ( )
127125 {
128126 pauseSemaphore . Wait ( cancellationTokenSource . Token ) ;
@@ -154,7 +152,7 @@ public void Dispose()
154152 }
155153
156154
157- private readonly record struct FileDetails ( string FileName , long UncompressedSize ) ;
155+ public readonly record struct FileDetails ( string FileName , long UncompressedSize ) ;
158156
159157
160158}
0 commit comments