parseBookmarkKey restituisce QVariantMap (i puntatori int* non sono marshallabili da QML — il segno non si ripristinava mai)
This commit is contained in:
@@ -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
@@ -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
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user