ReaderPage: watchdog 15s (niente spinner infinito) + apertura ritardata per evitare race WebView

This commit is contained in:
2026-08-12 15:33:01 +02:00
parent 129ff44b06
commit a159e6b252
+26
View File
@@ -36,6 +36,7 @@ Page {
onLoadedChanged: {
if (!loaded)
return
loadWatchdog.stop()
if (page.restoring)
page.restoring = false
else
@@ -51,6 +52,25 @@ Page {
size: BusyIndicatorSize.Large
}
// watchdog: se il capitolo non si carica, niente spinner infinito
Timer {
id: loadWatchdog
interval: 15000
onTriggered: {
if (!web.loaded && !page.ready) {
page.errorMessage = "Il lettore non risponde (WebView). Il file EPUB potrebbe essere danneggiato."
page.ready = true
}
}
}
// ritardo di apertura: evita la race tra onCompleted e l'init del WebView
Timer {
id: openTimer
interval: 100
onTriggered: openChapter()
}
Label {
anchors.centerIn: parent
text: page.errorMessage
@@ -209,6 +229,10 @@ Page {
page.ready = true
return
}
openTimer.start()
}
function openChapter() {
// ripristina il segno locale
var key = appSettings.bookmarkKey(page.bookId, page.bookFormat)
var ch = 0
@@ -217,6 +241,8 @@ Page {
page.currentChapter = Math.max(0, Math.min(ch, book.chapterCount - 1))
page.chapterFraction = fr
}
page.ready = false
loadWatchdog.restart()
web.url = "file://" + book.chapterFilePath(page.currentChapter)
}