Files
kaneda c5c4049030 fix(api): watchdog con timeout su tutte le richieste — mai piu' attese infinite (v0.5.1)
Sintomo sul device: l'app restava sullo splash in caricamento per sempre.
Causa: QNetworkAccessManager non applica timeout — una richiesta che non
riceve risposta (rete del telefono, server occupato) lasciava la UI in
attesa infinita, senza errori visibili.

- ApiClient::armTimeout(): watchdog per reply (abort -> normale percorso
  d'errore del chiamante). Applicato a: checkAuth (12 s), login (20 s),
  refreshSessions e openSession (60 s), newSession/chat-start/switchProfile
  (20-30 s), fetchProfiles (20 s), transcribe (300 s), tts (120 s).
  Nessun watchdog sullo stream SSE (longevo per design).
- checkAuth: imposta lastError anche in errore (messaggio tradotto
  "Server not reachable (timeout)") e logga indirizzo ed esito
- refreshSessions: log della durata (misurato sul probe: il primo fetch
  dopo un cambio profilo puo' prendere 11-16 s lato server, anche su DB
  minuscolo — l'app ora lo gestisce senza sembrare bloccata)
- SplashPage: rete di sicurezza (se authChecked non arriva entro 15 s si
  va comunque al login) + log di instradamento
- i18n: nuova stringa tradotta it/fr/de
2026-09-13 07:37:12 +02:00

51 lines
1.3 KiB
QML

import QtQuick 2.0
import Sailfish.Silica 1.0
// Avvio: verifica lo stato dell'autenticazione (cookie persistito) e
// indirizza verso la lista sessioni o il login.
Page {
id: page
Column {
anchors.centerIn: parent
spacing: Theme.paddingLarge
width: parent.width - 2 * Theme.horizontalPageMargin
Label {
anchors.horizontalCenter: parent.horizontalCenter
text: "Hermes"
font.pixelSize: Theme.fontSizeHuge
color: Theme.highlightColor
}
BusyIndicator {
anchors.horizontalCenter: parent.horizontalCenter
size: BusyIndicatorSize.Large
running: true
}
}
Connections {
target: api
onAuthChecked: page.route(loggedIn)
}
// Rete di sicurezza: se il controllo d'avvio non risponde entro 15 s
// (bug o rete muta), si va comunque al login invece di restare qui.
Timer {
interval: 15000
running: true
onTriggered: page.route(false)
}
Component.onCompleted: api.checkAuth()
function route(loggedIn) {
console.log("[hermes] route: loggedIn=" + loggedIn)
if (loggedIn)
pageStack.replace(Qt.resolvedUrl("SessionsPage.qml"))
else
pageStack.replace(Qt.resolvedUrl("LoginPage.qml"))
}
}