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;
|
|
};
|
|
|