/** \brief For given file with Okular browsing history returns a single NowReadingEntry. */ bool convertOkularXMLFileToEntry(const QString &okularFilePath, NowReadingEntry &outEntry) { /* open the Okular document history file */ QFile okularFile(okularFilePath); if (!okularFile.open(QFile::ReadOnly)) return false; QXmlStreamReader xml(&okularFile); QString vp; outEntry.path = QString(); while (!xml.atEnd()) { if (QXmlStreamReader::StartElement != xml.readNext()) continue; if (xml.name() == "documentInfo") { outEntry.path = xml.attributes().value("url").toString(); } else if (xml.name() == "current") { vp = xml.attributes().value("viewport").toString(); break; } } if (outEntry.path.isEmpty()) return false; /* get the page number from viewport string: */ QStringList tokens = vp.split(";"); if (tokens.empty()) return false; bool pageOk = true; outEntry.currentPage = tokens.first().toUInt(&pageOk) + 1 /* the value in vp is 0-based */; if (!pageOk) return false; QScopedPointer<PagesNumberProvider> pageNumberProvider (PagesNumberProvider::createByFileName(outEntry.path)); if (!pageNumberProvider) return false; if (!pageNumberProvider->getNumberOfPages(outEntry.totalPages)) return false; outEntry.accessTime = QFileInfo(okularFile).lastModified(); return true; }