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:
@@ -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: { }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user