M2: passläge, offline-först med synk-kö, vilotimer med inställningar
Some checks failed
release / build-release (push) Has been cancelled
Some checks failed
release / build-release (push) Has been cancelled
- Room-cache: övningar/muskelgrupper/favoritkort + lokal-först-pass - SyncEngine: FIFO-op-kö mot API:t, retry med backoff, synk-status per set (moln-ikon) + global räknare; nätfel loggar inte ut användaren - Passläge: en övning i taget (svep), ±steppers, RPE, förifyllda värden från förra passet, logga set med ett tryck - Vilotimer: helskärm eller banner (inställning), larm/vibration/visuell/ inget vid utgång, ±15s, per-övnings vilotid via API:ts defaultRestSeconds - Övningsväljare: sök + muskelgrupp/muskel-chips med ikoner (API:ts iconKey med namnheuristik som fallback), favoriter först, KG/REPS/TID/M-brickor - Navigation: bottenrad + start-FAB + minispelare, hemskärm med favoritpass - Inställningsskärm under Profil; historik-lista; version 0.2.0 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kf4MAbZ3c3B4Xy5XfuGsCP
This commit is contained in:
@@ -47,6 +47,11 @@ class GraphQlClient(private val urlProvider: suspend () -> String) {
|
||||
|
||||
http.newCall(request).execute().use { response ->
|
||||
val text = response.body?.string().orEmpty()
|
||||
// 5xx = servern/proxyn nere — behandla som nätfel (retry) och inte
|
||||
// som ett logiskt API-fel (som t.ex. loggar ut användaren).
|
||||
if (response.code >= 500) {
|
||||
throw java.io.IOException("HTTP ${response.code} från servern")
|
||||
}
|
||||
val root = runCatching { json.parseToJsonElement(text).jsonObject }.getOrNull()
|
||||
?: throw GraphQlException(listOf("HTTP ${response.code}: oväntat svar från servern"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user