# HG changeset patch # User Lucas Thompson # Date 1523955830 -3600 # Node ID 3c3eedc2fad852d85b84ffcdf0716a8bbc990358 # Parent 51493540a753a61f137aa12cd3889cc5d248561b Implement progress reporting for multi-selection. Needs refactoring. diff -r 51493540a753 -r 3c3eedc2fad8 data/fileio/CSVFileWriter.cpp --- a/data/fileio/CSVFileWriter.cpp Tue Apr 17 10:03:50 2018 +0100 +++ b/data/fileio/CSVFileWriter.cpp Tue Apr 17 10:03:50 2018 +0100 @@ -29,6 +29,7 @@ #include #include #include +#include CSVFileWriter::CSVFileWriter(QString path, Model *model, @@ -87,14 +88,44 @@ bool completed = false; + const auto nFramesToWrite = std::accumulate( + selection->getSelections().begin(), + selection->getSelections().end(), + 0, + [](sv_frame_t acc, const Selection& current) -> sv_frame_t { + return acc + (current.getEndFrame() - current.getStartFrame()); + } + ); + + sv_frame_t nFramesWritten = 0; + const auto createProgressCalculator = [ + &nFramesWritten, + &nFramesToWrite + ](sv_frame_t nFramesToWriteForSelection) { + const auto nFramesWrittenAtSelectionStart = nFramesWritten; + nFramesWritten += nFramesToWriteForSelection; + return [ + &nFramesWritten, + &nFramesToWrite, + nFramesWrittenAtSelectionStart + ] (sv_frame_t nFramesWrittenForSelection) { + const auto nFramesWrittenSoFar = ( + nFramesWrittenAtSelectionStart + nFramesWrittenForSelection + ); + return 100 * nFramesWrittenSoFar / nFramesToWrite; + }; + }; + for (const auto& bounds : selection->getSelections()) { - completed = CSVStreamWriter::writeInChunks( + completed = CSV::writeToStreamInChunks( out, *m_model, bounds, m_reporter, m_delimiter, - m_options + m_options, + 16384, + createProgressCalculator ); if (!completed) { break;