/* * scribiu -- read notebooks and voice memos from Livescribe pens * Copyright (C) 2015 Javier S. Pedro * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #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