diff options
author | Torsten Grote <t@grobox.de> | 2022-09-27 17:56:05 -0300 |
---|---|---|
committer | Torsten Grote <t@grobox.de> | 2023-03-28 13:25:30 -0300 |
commit | ffe67691fe7ad995113eacb0ee5785f51e0051de (patch) | |
tree | 78e687a1a665a73547f34ea699787a99dc342ae2 /wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt | |
parent | 8c098d96fc2c0e2d4fa96561f44980e0df5dad87 (diff) | |
download | taler-android-ffe67691fe7ad995113eacb0ee5785f51e0051de.tar.gz taler-android-ffe67691fe7ad995113eacb0ee5785f51e0051de.tar.bz2 taler-android-ffe67691fe7ad995113eacb0ee5785f51e0051de.zip |
[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.
Diffstat (limited to 'wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt')
-rw-r--r-- | wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt | 45 |
1 files changed, 28 insertions, 17 deletions
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<List<PendingOperationInfo>>() 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<PendingOperationInfo>() + 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<PendingOperationInfo>() - 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") + } } } |