#ifndef LOGCOMPRESSOR_H #define LOGCOMPRESSOR_H #include class LogCompressor : public QThread { Q_OBJECT public: /** @brief Create the log compressor. It will only get active upon calling startCompression() */ LogCompressor(QString logFileName, QString outFileName="", QString delimiter="\t"); /** @brief Start the compression of a raw, line-based logfile into a CSV file */ void startCompression(bool holeFilling=false); bool isFinished(); int getCurrentLine(); protected: void run(); ///< This function actually performs the compression. It's an overloaded function from QThread QString logFileName; ///< The input file name. QString outFileName; ///< The output file name. If blank defaults to logFileName bool running; ///< True when the startCompression() function is operating. int currentDataLine; ///< The current line of data that is being processed. Only relevant when running==true QString delimiter; ///< Delimiter between fields in the output file. Defaults to tab ('\t') bool holeFillingEnabled; ///< Enables the filling of holes in the dataset with the previous value (or NaN if none exists) signals: /** @brief This signal is emitted once a logfile has been finished writing * @param fileName The name of the output (CSV) file */ void finishedFile(QString fileName); /// This signal is connected to QGCApplication::showCriticalMessage to show critical errors which come from the thread. /// There is no need for clients to connect to this signal. void logProcessingCriticalError(const QString& title, const QString& msg); private: void _signalCriticalError(const QString& msg); }; #endif // LOGCOMPRESSOR_H