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
- Impostazioni > Sessions: selettore "Profile" (elenco da /api/profiles;
"(server active)" come prima voce = nessun cookie di profilo)
- ApiClient: fetchProfiles() + switchProfile(); lo switch usa
/api/profile/switch (process_wide=False lato server: il cookie firmato
hermes_profile scopa le richieste dell'app per-client; il profilo attivo
globale del server non viene toccato); refresh automatico delle sessioni
- CookieJar::removeCookiesByName per l'opzione "(server active)"
- Il profilo scelto viene riapplicato automaticamente dopo il login
- i18n: nuove stringhe tradotte it/fr/de
- translations/: harbour-hermes-it/fr/de.ts (78 stringhe ciascuna, 100%
tradotte) + caricamento in main.cpp in base alla lingua di sistema
- .pro: CONFIG += sailfishapp_i18n + TRANSLATIONS (pattern ufficiale
Sailfish: .qm generati in build e installati in
/usr/share/harbour-hermes/translations)
- stringhe visibili del core in tr(): ApiClient, ChatModel, Recorder
(VoiceRecorder era gia' ok); plurali dei messaggi corretti
(1 message / %1 messages) in SessionsPage e CoverPage
- spec: BuildRequires qt5-qttools-linguist + %files translations
- README/BUILD: sezione Localization + workflow lupdate/lrelease
Verificato: lupdate 78/78 per it/fr/de, lrelease OK, e test runtime di
caricamento .qm (tutte le traduzioni risolte nei contesti corretti).