MeterFilter meter;
StreamTransformationFilter decryptorFilter((StreamTransformation&)decryptor);
Base64Decoder base64Dec;
FileSource source(sourceStream, false);
FileSink sink(destStream);
source.Attach(new Redirector(decryptorFilter));
if (Base64Encode)
{
decryptorFilter.Attach(new Redirector(base64Dec));
base64Dec.Attach(new Redirector(meter)); // meter filter feeding base64 decryptor? will this work?
}
else
{
decryptorFilter.Attach(new Redirector(meter));
}
meter.Attach(new Redirector(sink));
word64 processed = 0;
while (!FileUtil::EndOfFile(source) && !source.SourceExhausted())
{
source.Pump(ChunkSize); // so hear we would have to adjust ChunkSize to the nearest greater multiple of 3?
decryptorFilter.Flush(false);
processed += ChunkSize;
if (ProgressCallback != nullptr)
{
if (processed % (ProgressEvery) == 0)
{
ProgressCallback(meter.GetTotalBytes());
}
}
}