|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <QString>
 | 
					
						
							|  |  |  | #include <QNetworkAccessManager>
 | 
					
						
							|  |  |  | #include <QWidget>
 | 
					
						
							|  |  |  | #include <QVector>
 | 
					
						
							|  |  |  | #include <QMultiMap>
 | 
					
						
							|  |  |  | #include <QElapsedTimer>
 | 
					
						
							|  |  |  | #include <QReadWriteLock>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <bzlib.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <kj/io.h>
 | 
					
						
							|  |  |  | #include <capnp/serialize.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "cereal/gen/cpp/log.capnp.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <thread>
 | 
					
						
							|  |  |  | #include "channel.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FileReader : public QObject {
 | 
					
						
							|  |  |  |   Q_OBJECT
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public:
 | 
					
						
							|  |  |  |   FileReader(const QString& file_);
 | 
					
						
							|  |  |  |   void startRequest(const QUrl &url);
 | 
					
						
							|  |  |  |   ~FileReader();
 | 
					
						
							|  |  |  |   virtual void readyRead();
 | 
					
						
							|  |  |  |   void httpFinished();
 | 
					
						
							|  |  |  |   virtual void done() {};
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | public slots:
 | 
					
						
							|  |  |  |   void process();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | protected:
 | 
					
						
							|  |  |  |   QNetworkReply *reply;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private:
 | 
					
						
							|  |  |  |   QNetworkAccessManager *qnam;
 | 
					
						
							|  |  |  |   QElapsedTimer timer;
 | 
					
						
							|  |  |  |   QString file;
 | 
					
						
							|  |  |  | };
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef QMultiMap<uint64_t, cereal::Event::Reader> Events;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LogReader : public FileReader {
 | 
					
						
							|  |  |  | Q_OBJECT
 | 
					
						
							|  |  |  | public:
 | 
					
						
							|  |  |  |   LogReader(const QString& file, Events *, QReadWriteLock* events_lock_, QMap<int, QPair<int, int> > *eidx_);
 | 
					
						
							|  |  |  |   ~LogReader();
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   void readyRead();
 | 
					
						
							|  |  |  |   void done() { is_done = true; };
 | 
					
						
							|  |  |  |   bool is_done = false;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private:
 | 
					
						
							|  |  |  |   bz_stream bStream;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // backing store
 | 
					
						
							|  |  |  |   QByteArray raw;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   std::thread *parser;
 | 
					
						
							|  |  |  |   int event_offset;
 | 
					
						
							|  |  |  |   channel<int> cdled;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // global
 | 
					
						
							|  |  |  |   void mergeEvents(int dled);
 | 
					
						
							|  |  |  |   Events *events;
 | 
					
						
							|  |  |  |   QReadWriteLock* events_lock;
 | 
					
						
							|  |  |  |   QMap<int, QPair<int, int> > *eidx;
 | 
					
						
							|  |  |  | };
 |