diff --git a/qml/pages/ReaderPage.qml b/qml/pages/ReaderPage.qml index b214618..b9664d1 100644 --- a/qml/pages/ReaderPage.qml +++ b/qml/pages/ReaderPage.qml @@ -259,10 +259,15 @@ Page { var key = appSettings.bookmarkKey(page.bookId, page.bookFormat) var ch = 0 var fr = 0.0 - if (key.length > 0 && book.parseBookmarkKey(key, ch, fr)) { - page.currentChapter = Math.max(0, Math.min(ch, book.chapterCount - 1)) - page.chapterFraction = fr + if (key.length > 0) { + var r = book.parseBookmarkKey(key) + if (r && r.hasOwnProperty("chapter")) { + ch = Math.max(0, Math.min(r.chapter, book.chapterCount - 1)) + fr = r.fraction + } } + page.currentChapter = ch + page.chapterFraction = fr loadChapter() } diff --git a/src/epub.cpp b/src/epub.cpp index f4ade5c..da9ddc9 100644 --- a/src/epub.cpp +++ b/src/epub.cpp @@ -443,20 +443,19 @@ QString EpubBook::makeBookmarkKey(int chapterIndex, double fraction) const return QStringLiteral("cw:v1:%1:%2").arg(chapterIndex).arg(fraction, 0, 'f', 4); } -bool EpubBook::parseBookmarkKey(const QString &key, int *chapterIndex, double *fraction) const +QVariantMap EpubBook::parseBookmarkKey(const QString &key) const { + QVariantMap result; const QStringList parts = key.split(QLatin1Char(':')); if (parts.size() != 4 || parts.at(0) != QLatin1String("cw") || parts.at(1) != QLatin1String("v1")) - return false; + return result; bool okChapter = false, okFrac = false; const int ch = parts.at(2).toInt(&okChapter); const double fr = parts.at(3).toDouble(&okFrac); if (!okChapter || !okFrac) - return false; - if (chapterIndex) - *chapterIndex = ch; - if (fraction) - *fraction = fr; - return true; + return result; + result.insert(QStringLiteral("chapter"), ch); + result.insert(QStringLiteral("fraction"), fr); + return result; } diff --git a/src/epub.h b/src/epub.h index a68b936..53dfbfb 100644 --- a/src/epub.h +++ b/src/epub.h @@ -43,7 +43,8 @@ public: // chiave segno locale, es. "cw:v1:3:0.42" (capitolo 3, 42% del capitolo) Q_INVOKABLE QString makeBookmarkKey(int chapterIndex, double fraction) const; - Q_INVOKABLE bool parseBookmarkKey(const QString &key, int *chapterIndex, double *fraction) const; + // restituisce {chapter, fraction} oppure mappa vuota se la chiave non รจ valida + Q_INVOKABLE QVariantMap parseBookmarkKey(const QString &key) const; signals: void changed();