From ffe67691fe7ad995113eacb0ee5785f51e0051de Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 27 Sep 2022 17:56:05 -0300 Subject: [wallet] Don't run qtart in a separate process This required IPC and the mechanism chosen was limiting us to transferring 1MB (or less!) to/from wallet-core. Now we simply run it in an IO thread. The should be no functional difference (except new bugs introduced when swapping in a new mechanism). The second process with qtart running in WalletBackendService also got killed when the OS killed our main process. --- .../wallet/pending/PendingOperationsManager.kt | 45 ++++++++++++++-------- 1 file changed, 28 insertions(+), 17 deletions(-) (limited to 'wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt') diff --git a/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt b/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt index df778ed..f5079f6 100644 --- a/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt +++ b/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt @@ -18,40 +18,51 @@ package net.taler.wallet.pending import android.util.Log import androidx.lifecycle.MutableLiveData +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch +import kotlinx.serialization.json.jsonArray import net.taler.wallet.TAG +import net.taler.wallet.backend.ApiResponse import net.taler.wallet.backend.WalletBackendApi import org.json.JSONObject open class PendingOperationInfo( val type: String, - val detail: JSONObject + val detail: JSONObject, ) -class PendingOperationsManager(private val walletBackendApi: WalletBackendApi) { +class PendingOperationsManager( + private val walletBackendApi: WalletBackendApi, + private val scope: CoroutineScope, +) { val pendingOperations = MutableLiveData>() internal fun getPending() { - walletBackendApi.sendRequest("getPendingOperations") { isError, result -> - if (isError) { - Log.i(TAG, "got getPending error result: ${result.toString(2)}") - return@sendRequest + scope.launch { + val response = walletBackendApi.sendRequest("getPendingOperations") + if (response is ApiResponse.Error) { + Log.i(TAG, "got getPending error result: ${response.error}") + return@launch + } else if (response is ApiResponse.Response) { + Log.i(TAG, "got getPending result") + val pendingList = mutableListOf() + val pendingJson = response.result["pendingOperations"]?.jsonArray ?: return@launch + for (i in 0 until pendingJson.size) { + val p = JSONObject(pendingJson[i].toString()) + val type = p.getString("type") + pendingList.add(PendingOperationInfo(type, p)) + } + Log.i(TAG, "Got ${pendingList.size} pending operations") + pendingOperations.postValue((pendingList)) } - Log.i(TAG, "got getPending result") - val pendingList = mutableListOf() - val pendingJson = result.getJSONArray("pendingOperations") - for (i in 0 until pendingJson.length()) { - val p = pendingJson.getJSONObject(i) - val type = p.getString("type") - pendingList.add(PendingOperationInfo(type, p)) - } - Log.i(TAG, "Got ${pendingList.size} pending operations") - pendingOperations.postValue((pendingList)) } } fun retryPendingNow() { - walletBackendApi.sendRequest("retryPendingNow") + scope.launch { + walletBackendApi.sendRequest("retryPendingNow") + } } } -- cgit v1.2.3