summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
diff options
context:
space:
mode:
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt')
-rw-r--r--wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt47
1 files changed, 26 insertions, 21 deletions
diff --git a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
index 9d31b5f..8205eb7 100644
--- a/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
+++ b/wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt
@@ -19,17 +19,22 @@ package net.taler.wallet.exchanges
import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
-import com.fasterxml.jackson.databind.ObjectMapper
-import com.fasterxml.jackson.module.kotlin.readValue
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+import kotlinx.serialization.Serializable
import net.taler.common.Event
import net.taler.common.toEvent
import net.taler.wallet.TAG
import net.taler.wallet.backend.WalletBackendApi
-import org.json.JSONObject
+
+@Serializable
+data class ExchangeListResponse(
+ val exchanges: List<ExchangeItem>
+)
class ExchangeManager(
- private val walletBackendApi: WalletBackendApi,
- private val mapper: ObjectMapper
+ private val api: WalletBackendApi,
+ private val scope: CoroutineScope
) {
private val mProgress = MutableLiveData<Boolean>()
@@ -45,31 +50,31 @@ class ExchangeManager(
private fun list(): LiveData<List<ExchangeItem>> {
mProgress.value = true
- walletBackendApi.sendRequest("listExchanges") { isError, result ->
- if (isError) {
+ scope.launch {
+ val response = api.request("listExchanges", ExchangeListResponse.serializer())
+ response.onError {
throw AssertionError("Wallet core failed to return exchanges!")
- } else {
- val exchanges: List<ExchangeItem> = mapper.readValue(result.getString("exchanges"))
- Log.d(TAG, "Exchange list: $exchanges")
+ }.onSuccess {
+ Log.d(TAG, "Exchange list: ${it.exchanges}")
mProgress.value = false
- mExchanges.value = exchanges
+ mExchanges.value = it.exchanges
}
}
return mExchanges
}
- fun add(exchangeUrl: String) {
+ fun add(exchangeUrl: String) = scope.launch {
mProgress.value = true
- val args = JSONObject().apply { put("exchangeBaseUrl", exchangeUrl) }
- walletBackendApi.sendRequest("addExchange", args) { isError, result ->
+ api.request<Unit>("addExchange") {
+ put("exchangeBaseUrl", exchangeUrl)
+ }.onError {
mProgress.value = false
- if (isError) {
- Log.e(TAG, "$result")
- mAddError.value = true.toEvent()
- } else {
- Log.d(TAG, "Exchange $exchangeUrl added")
- list()
- }
+ Log.e(TAG, "Error adding exchange: $it")
+ mAddError.value = true.toEvent()
+ }.onSuccess {
+ mProgress.value = false
+ Log.d(TAG, "Exchange $exchangeUrl added")
+ list()
}
}