You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							1.3 KiB
						
					
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							1.3 KiB
						
					
					
				#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.hpp"
 | 
						|
 | 
						|
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;
 | 
						|
};
 | 
						|
 |