public int Run(string[] args) { ShowInfo(); var(compressionMode, sourceFilePath, destinationFilePath) = GetValidatedParams(args); var sourceFile = new FileInfo(sourceFilePath); var destinationFile = new FileInfo(destinationFilePath); _progressBar = new ProgressBarAdapter(); if (compressionMode == "compress") { var compressor = new ChunkedGZipCompressor(); _threadManager = new ThreadManager(sourceFile, MaxBytesChunk, compressor, destinationFile); _progressBar.SetStatus("Compressing..."); } else { var decompressor = new ChunkedGZipDecompressor(); _threadManager = new ThreadManager(sourceFile, decompressor, destinationFile); _progressBar.SetStatus("Decompressing..."); } _threadManager.UpdateInfoText += msg => WriteConsoleWithTag(msg); _threadManager.PercentProgressChanged += _progressBar.SetProgress; Console.CancelKeyPress += (s, e) => { if (e.SpecialKey == ConsoleSpecialKey.ControlC) { _progressBar?.SetStatus("Cancelling..."); e.Cancel = true; _threadManager?.Cancel(); } }; return(_threadManager.Run()); }
public ThreadManager(FileInfo source, int maxBytesChunk, ChunkedGZipCompressor chunkedHandler, FileInfo destination) { _reader = new ChunkedFileReader(source, maxBytesChunk, _token.Token); InitializeModules(chunkedHandler, destination); }