add connetivity banners

This commit is contained in:
2026-05-23 22:23:54 +05:00
parent ee9f98b720
commit 523d1248bd
8 changed files with 87 additions and 1 deletions
@@ -2,6 +2,7 @@ package sh.sar.basedbank.api.bml
import org.json.JSONObject
import sh.sar.basedbank.api.models.BankAccount
import sh.sar.basedbank.api.models.BankServerException
data class BmlUserInfo(
val fullName: String,
@@ -27,6 +28,7 @@ class BmlAccountClient {
val json = resp.body?.string()
resp.close()
if (code == 401 || code == 419) throw AuthExpiredException()
if (code in 500..599) throw BankServerException("BML")
return parseDashboard(json ?: return emptyList(), loginTag, profileName, profileId)
}
@@ -36,6 +38,7 @@ class BmlAccountClient {
val code = resp.code
resp.close()
if (code == 401 || code == 419) throw AuthExpiredException()
if (code in 500..599) throw BankServerException("BML")
}
fun fetchUserInfo(session: BmlSession): BmlUserInfo? {
@@ -4,6 +4,7 @@ import okhttp3.OkHttpClient
import okhttp3.Request
import org.json.JSONObject
import sh.sar.basedbank.api.models.BankAccount
import sh.sar.basedbank.api.models.BankServerException
import java.util.concurrent.TimeUnit
class FahipayAccountClient {
@@ -27,8 +28,10 @@ class FahipayAccountClient {
Request.Builder().url("$BASE_URL/actions/getprofile/?lang=en")
.auth(session).build()
).execute()
val code = resp.code
val json = resp.body?.string() ?: throw Exception("Empty profile response")
resp.close()
if (code in 500..599) throw BankServerException("Fahipay")
val obj = JSONObject(json)
val props = obj.optJSONObject("props") ?: JSONObject()
return FahipayUserProfile(
@@ -47,8 +50,10 @@ class FahipayAccountClient {
Request.Builder().url("$BASE_URL/actions/getbalance/?lang=en")
.auth(session).build()
).execute()
val code = resp.code
val json = resp.body?.string() ?: return 0.0
resp.close()
if (code in 500..599) throw BankServerException("Fahipay")
return try {
val obj = JSONObject(json)
if (obj.optBoolean("error")) 0.0 else obj.optDouble("balance", 0.0)
@@ -373,6 +373,7 @@ class MibLoginFlow(private val credentialStore: CredentialStore) {
.build()
val response = client.newCall(request).execute()
if (response.code == 419) throw SessionExpiredException()
if (response.code in 500..599) throw sh.sar.basedbank.api.models.BankServerException("MIB")
return response.body?.string() ?: throw IllegalStateException("Empty response body")
}
@@ -1,5 +1,8 @@
package sh.sar.basedbank.api.models
/** Thrown by a bank API client when the server returns an HTTP 5xx response. */
class BankServerException(val bankName: String) : Exception("Server error from $bankName")
/**
* Unified account model used across all banks (MIB, BML, Fahipay, ...).
* The [bank] field identifies which bank owns this account.