#ifndef PAPERREPLAY_H #define PAPERREPLAY_H #include #include #include #include #define PAPER_REPLAY "Paper Replay" class PaperReplay : public QObject { Q_OBJECT struct SessionData : public QSharedData { quint64 id; QString name; qint64 start, end; QVector pages; QString file; }; public: explicit PaperReplay(QObject *parent = 0); class Session { public: Session(); ~Session(); bool isValid() const; quint64 id() const; QString name() const; qint64 startTime() const; qint64 endTime() const; QVector pages() const; QString fileName() const; static bool startTimeLess(const Session &a, const Session &b); private: Session(quint64 id); QSharedDataPointer d; friend class PaperReplay; friend class SessionList; }; class SessionList { public: SessionList(); QList sessionsDuringTime(qint64 time) const; private: explicit SessionList(const QMap& byTime); QMap _m; friend class PaperReplay; }; bool open(const QString &path, quint64 notebookGuid = 0); void close(); QList sessions() const; SessionList sessions(quint64 pageAddress) const; private: static bool parseSessionInfo(SessionData *session, const QString &path); static bool parseSessionInfo(SessionData *session, QIODevice *dev); static bool parseSessionInfoV3(SessionData *session, QIODevice *dev); static bool parseSessionPages(SessionData *session, const QString &path); static bool parseSessionPages(SessionData *session, QIODevice *dev); static bool parseSessionPagesV1(SessionData *session, QIODevice *dev); private: QDir _dir; QHash _sessions; QMap > _byPageTime; }; #endif // PAPERREPLAY_H