parseBookmarkKey restituisce QVariantMap (i puntatori int* non sono marshallabili da QML — il segno non si ripristinava mai)

This commit is contained in:
2026-08-12 17:26:15 +02:00
parent cbe4153881
commit d230d543dd
3 changed files with 17 additions and 12 deletions
+8 -3
View File
@@ -259,10 +259,15 @@ Page {
var key = appSettings.bookmarkKey(page.bookId, page.bookFormat) var key = appSettings.bookmarkKey(page.bookId, page.bookFormat)
var ch = 0 var ch = 0
var fr = 0.0 var fr = 0.0
if (key.length > 0 && book.parseBookmarkKey(key, ch, fr)) { if (key.length > 0) {
page.currentChapter = Math.max(0, Math.min(ch, book.chapterCount - 1)) var r = book.parseBookmarkKey(key)
page.chapterFraction = fr 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() loadChapter()
} }
+7 -8
View File
@@ -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); 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(':')); const QStringList parts = key.split(QLatin1Char(':'));
if (parts.size() != 4 || parts.at(0) != QLatin1String("cw") if (parts.size() != 4 || parts.at(0) != QLatin1String("cw")
|| parts.at(1) != QLatin1String("v1")) || parts.at(1) != QLatin1String("v1"))
return false; return result;
bool okChapter = false, okFrac = false; bool okChapter = false, okFrac = false;
const int ch = parts.at(2).toInt(&okChapter); const int ch = parts.at(2).toInt(&okChapter);
const double fr = parts.at(3).toDouble(&okFrac); const double fr = parts.at(3).toDouble(&okFrac);
if (!okChapter || !okFrac) if (!okChapter || !okFrac)
return false; return result;
if (chapterIndex) result.insert(QStringLiteral("chapter"), ch);
*chapterIndex = ch; result.insert(QStringLiteral("fraction"), fr);
if (fraction) return result;
*fraction = fr;
return true;
} }
+2 -1
View File
@@ -43,7 +43,8 @@ public:
// chiave segno locale, es. "cw:v1:3:0.42" (capitolo 3, 42% del capitolo) // 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 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: signals:
void changed(); void changed();