Lettore EPUB nativo: ReaderPage (WebView+capitoli+progresso), segno locale in QSettings, sync POST /ajax/bookmark con fallback CSRF, pulsante Leggi nel dettaglio
This commit is contained in:
@@ -8,6 +8,8 @@ Page {
|
||||
property string coverSource: ""
|
||||
property bool downloading: false
|
||||
property string downloadError: ""
|
||||
property bool readingNow: false
|
||||
property string readingUrl: ""
|
||||
|
||||
SilicaFlickable {
|
||||
anchors.fill: parent
|
||||
@@ -29,6 +31,14 @@ Page {
|
||||
visible: source.length > 0
|
||||
}
|
||||
|
||||
Button {
|
||||
anchors.horizontalCenter: parent.horizontalCenter
|
||||
text: "Leggi (EPUB)"
|
||||
visible: page.hasEpubFormat()
|
||||
enabled: !page.downloading
|
||||
onClicked: startReading()
|
||||
}
|
||||
|
||||
Label {
|
||||
x: Theme.horizontalPageMargin
|
||||
width: parent.width - 2 * Theme.horizontalPageMargin
|
||||
@@ -157,6 +167,50 @@ Page {
|
||||
return out.trim()
|
||||
}
|
||||
|
||||
function hasEpubFormat() {
|
||||
var fmts = bookData.formats
|
||||
if (!fmts)
|
||||
return false
|
||||
for (var i = 0; i < fmts.length; i++)
|
||||
if (String(fmts[i].format).toLowerCase() === "epub")
|
||||
return true
|
||||
return false
|
||||
}
|
||||
|
||||
function firstEpubFormat() {
|
||||
var fmts = bookData.formats
|
||||
if (!fmts)
|
||||
return null
|
||||
for (var i = 0; i < fmts.length; i++)
|
||||
if (String(fmts[i].format).toLowerCase() === "epub")
|
||||
return fmts[i]
|
||||
return null
|
||||
}
|
||||
|
||||
// estrae l'id numerico calibre da un url di download: /opds/download/<id>/<formato>/
|
||||
function extractBookId(u) {
|
||||
var parts = u.split("/")
|
||||
for (var i = 0; i < parts.length - 1; i++)
|
||||
if (parts[i] === "download" && parts[i + 1].length > 0
|
||||
&& !isNaN(parseInt(parts[i + 1])))
|
||||
return parseInt(parts[i + 1])
|
||||
return 0
|
||||
}
|
||||
|
||||
function startReading() {
|
||||
var f = page.firstEpubFormat()
|
||||
if (!f)
|
||||
return
|
||||
var id = page.extractBookId(f.url)
|
||||
if (id <= 0)
|
||||
return
|
||||
page.readingNow = true
|
||||
page.readingUrl = f.url
|
||||
page.downloading = true
|
||||
page.downloadError = ""
|
||||
downloader.download(resolveUrl(f.url), appSettings.bookFilePath(id, "epub"))
|
||||
}
|
||||
|
||||
function startDownload(format) {
|
||||
if (page.downloading)
|
||||
return
|
||||
@@ -196,11 +250,19 @@ Page {
|
||||
onFinished: {
|
||||
page.downloading = false
|
||||
if (ok) {
|
||||
if (page.readingNow) {
|
||||
page.readingNow = false
|
||||
var id = page.extractBookId(page.readingUrl)
|
||||
pageStack.push(Qt.resolvedUrl("ReaderPage.qml"),
|
||||
{ epubPath: path, bookId: id, bookFormat: "epub" })
|
||||
return
|
||||
}
|
||||
page.downloadError = ""
|
||||
page.downloadNotice = "Salvato in " + path
|
||||
hideNoticeTimer.restart()
|
||||
} else {
|
||||
page.downloadNotice = ""
|
||||
page.readingNow = false
|
||||
page.downloadError = "Errore: " + error
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user