From e9f9b5098a9830d8396fceda9b8d45f5c849f8e7 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 12 Aug 2020 13:50:39 -0300 Subject: [wallet] remove remaining deserialization off the UI thread --- .../net/taler/wallet/exchanges/ExchangeManager.kt | 47 ++++++++++++---------- 1 file changed, 26 insertions(+), 21 deletions(-) (limited to 'wallet/src/main/java/net/taler/wallet/exchanges/ExchangeManager.kt') 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 +) class ExchangeManager( - private val walletBackendApi: WalletBackendApi, - private val mapper: ObjectMapper + private val api: WalletBackendApi, + private val scope: CoroutineScope ) { private val mProgress = MutableLiveData() @@ -45,31 +50,31 @@ class ExchangeManager( private fun list(): LiveData> { 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 = 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("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() } } -- cgit v1.2.3