1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
#ifndef REPLAYDATA_H
#define REPLAYDATA_H
#include <QtCore/QDateTime>
#include <QtCore/QDir>
#include <QtCore/QHash>
#include <QtCore/QMultiMap>
#include <QtCore/QVector>
class ReplayData : public QObject
{
Q_OBJECT
public:
explicit ReplayData(QObject *parent = 0);
bool open(const QString &path);
void close();
struct Session {
QDateTime start, end;
QString name;
QVector<quint64> pages;
QString file;
};
QList<Session> sessions(quint64 penId, quint64 notebookId);
QList<Session> sessions(quint64 penId, quint64 notebookId, quint64 pageAddress);
private:
struct NotebookData {
QHash<uint, Session> sessions;
QMultiMap<quint64, uint> byPage;
};
private:
bool findSessions();
static bool parseSessionInfo(Session &session, const QString &path);
static bool parseSessionInfo(Session &session, QIODevice *dev);
static bool parseSessionInfoV3(Session &session, QIODevice *dev);
static bool parseSessionPages(Session &session, const QString &path);
static bool parseSessionPages(Session &session, QIODevice *dev);
static bool parseSessionPagesV1(Session &session, QIODevice *dev);
private:
QDir _dir;
QHash<quint64, QHash<quint64, NotebookData> > _notebooks; // TODO Cache on demand
// /userdata/XXX-XXX-XXX-XX/Paper Replay/99/0bf11a726d11f3f3/sessions/PRS-21977890a4
};
#endif // REPLAYDATA_H
|