From a159e6b25275df1f54e2d61cfe201bfb02b95d8f Mon Sep 17 00:00:00 2001 From: Carlo Baratto Date: Wed, 12 Aug 2026 15:33:01 +0200 Subject: [PATCH] ReaderPage: watchdog 15s (niente spinner infinito) + apertura ritardata per evitare race WebView --- qml/pages/ReaderPage.qml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/qml/pages/ReaderPage.qml b/qml/pages/ReaderPage.qml index 85808fc..52a8375 100644 --- a/qml/pages/ReaderPage.qml +++ b/qml/pages/ReaderPage.qml @@ -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) }