Sync avanzamento server completa: login di sessione calibre-web (form + csrf_token + cookie) per le route web, fetchBookmark (GET /read/<id>/<format> con estrazione bookmark: "chiave"), ripristino all'apertura del libro con posizione server dominante, POST a ogni pagina girata già attivo; fallimento login gestito con cooldown 60s e fallback locale

This commit is contained in:
2026-08-13 09:28:34 +02:00
parent 2652f413a5
commit 9bdec3eb2d
3 changed files with 226 additions and 8 deletions
+34
View File
@@ -315,6 +315,11 @@ Page {
page.currentChapter = ch
page.chapterFraction = fr
loadChapter()
// ripristino anche dal server: la posizione remota vince, se esiste.
// Il login di sessione viene fatto qui (prima richiesta verso le route web)
if (page.bookId > 0)
apiClient.fetchBookmark(page.bookId, page.bookFormat)
}
onStatusChanged: {
@@ -327,4 +332,33 @@ Page {
applyMarginsJS()
}
}
Connections {
target: apiClient
// posizione letta dal server all'apertura del libro
onBookmarkReady: {
if (bookId !== page.bookId)
return
if (key.length === 0)
return // nessun segnalibro sul server: resta la posizione locale
var r = book.parseBookmarkKey(key)
if (!r || !r.hasOwnProperty("chapter"))
return
var same = (r.chapter === page.currentChapter)
&& (Math.abs(r.fraction - page.chapterFraction) < 0.01)
if (same)
return
page.currentChapter = r.chapter
page.chapterFraction = r.fraction
// aggiorna anche la copia locale
appSettings.setBookmarkKey(page.bookId, page.bookFormat, key)
if (page.ready && book.chapterCount() > 0)
loadChapter()
}
// sync non disponibile (server irraggiungibile, login bloccato, ...):
// si continua in locale, senza disturbare il lettore
onBookmarkError: { }
onLoginFailed: { }
}
}