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 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()
}
+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);
}
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;
}
+2 -1
View File
@@ -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();