diff options
Diffstat (limited to 'paperreplay.cc')
-rw-r--r-- | paperreplay.cc | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/paperreplay.cc b/paperreplay.cc index 8bfb20e..579ea3c 100644 --- a/paperreplay.cc +++ b/paperreplay.cc @@ -24,6 +24,14 @@ PaperReplay::PaperReplay(QObject *parent) : { } +PaperReplay::Session::Session() : d(new SessionData) +{ +} + +PaperReplay::Session::~Session() +{ +} + bool PaperReplay::open(const QString &path, const QString &penSerial, quint64 notebookGuid) { _dir.setPath(path + QString("/userdata/%1/Paper Replay/99/%2/sessions") @@ -43,10 +51,10 @@ bool PaperReplay::open(const QString &path, const QString &penSerial, quint64 no qWarning() << "Invalid session identifier:" << sessionDir.dirName(); } Session &session = _sessions[sessionId]; - if (!parseSessionInfo(session, sessionDir.filePath("session.info"))) { + if (!parseSessionInfo(session.d, sessionDir.filePath("session.info"))) { qWarning() << "Could not parse:" << sessionDir.absoluteFilePath("session.info"); } - if (!parseSessionPages(session, sessionDir.filePath("session.pages"))) { + if (!parseSessionPages(session.d, sessionDir.filePath("session.pages"))) { qWarning() << "Could not parse:" << sessionDir.absoluteFilePath("session.pages"); } } @@ -61,22 +69,22 @@ void PaperReplay::close() _dir.setPath(QString()); } -QList<PaperReplay::Session> PaperReplay::sessions() +QList<PaperReplay::Session> PaperReplay::sessions() const { return _sessions.values(); } -QList<PaperReplay::Session> PaperReplay::sessions(quint64 pageAddress) +QList<PaperReplay::Session> PaperReplay::sessions(quint64 pageAddress) const { QList<Session> sessions; - QMultiMap<quint64, quint64>::iterator it = _byPage.find(pageAddress); + QMultiMap<quint64, quint64>::const_iterator it = _byPage.constFind(pageAddress); while (it != _byPage.end() && it.key() == pageAddress) { sessions.append(_sessions[it.value()]); } return sessions; } -bool PaperReplay::parseSessionInfo(Session &session, const QString &path) +bool PaperReplay::parseSessionInfo(SessionData *session, const QString &path) { QFile f(path); if (f.open(QIODevice::ReadOnly)) { @@ -86,7 +94,7 @@ bool PaperReplay::parseSessionInfo(Session &session, const QString &path) } } -bool PaperReplay::parseSessionInfo(Session &session, QIODevice *dev) +bool PaperReplay::parseSessionInfo(SessionData *session, QIODevice *dev) { unsigned char magic[2]; if (dev->read(reinterpret_cast<char*>(magic), 2) != 2 || @@ -110,12 +118,12 @@ bool PaperReplay::parseSessionInfo(Session &session, QIODevice *dev) } } -bool PaperReplay::parseSessionInfoV3(Session &session, QIODevice *dev) +bool PaperReplay::parseSessionInfoV3(SessionData *session, QIODevice *dev) { QDataStream s(dev); if (s.skipRawData(5) != 5) return false; - qint64 startTime, endTime, creationTime; + quint64 startTime, endTime, creationTime; QString name; s >> startTime >> endTime >> creationTime; @@ -123,19 +131,26 @@ bool PaperReplay::parseSessionInfoV3(Session &session, QIODevice *dev) return false; } - qDebug() << "Name:" << name << Smartpen::fromPenTime(startTime) << Smartpen::fromPenTime(endTime) << creationTime; + session->name = name; + session->start = Smartpen::fromPenTime(startTime); + session->end = Smartpen::fromPenTime(endTime); + + qDebug() << "Session:" << name << session->start << session->end; quint16 num_clips; s >> num_clips; + Q_ASSERT(num_clips == 1); // TODO: We do not yet know how to handle this scenario + for (uint i = 0; i < num_clips; ++i) { QString file; if (!readUtfString(s, file)) { return false; } s >> startTime >> endTime; - qDebug() << " Clip:" << file << startTime << endTime; - qDebug() << " " << QDateTime::fromTime_t(startTime) << QDateTime::fromTime_t(endTime); + + qDebug() << " Clip:" << file << Smartpen::fromPenTime(startTime) << Smartpen::fromPenTime(endTime); + session->file = file; } quint16 num_strokes; @@ -157,7 +172,7 @@ bool PaperReplay::parseSessionInfoV3(Session &session, QIODevice *dev) return true; } -bool PaperReplay::parseSessionPages(Session &session, const QString &path) +bool PaperReplay::parseSessionPages(SessionData *session, const QString &path) { QFile f(path); if (f.open(QIODevice::ReadOnly)) { @@ -167,7 +182,7 @@ bool PaperReplay::parseSessionPages(Session &session, const QString &path) } } -bool PaperReplay::parseSessionPages(Session &session, QIODevice *dev) +bool PaperReplay::parseSessionPages(SessionData *session, QIODevice *dev) { unsigned char magic[2]; if (dev->read(reinterpret_cast<char*>(magic), 2) != 2 || @@ -191,21 +206,21 @@ bool PaperReplay::parseSessionPages(Session &session, QIODevice *dev) } } -bool PaperReplay::parseSessionPagesV1(Session &session, QIODevice *dev) +bool PaperReplay::parseSessionPagesV1(SessionData *session, QIODevice *dev) { QDataStream s(dev); if (s.skipRawData(1) != 1) return false; quint16 num_pages = 0; s >> num_pages; - session.pages.reserve(session.pages.size() + num_pages); + session->pages.reserve(session->pages.size() + num_pages); for (uint i = 0; i < num_pages; ++i) { - quint64 address, unk; - s >> address >> unk; + quint64 address, time; + s >> address >> time; - session.pages.append(address); - qDebug() << " Page:" << address << unk; + session->pages.append(address); + qDebug() << " Page:" << address << time << Smartpen::fromPenTime(time); } return true; |