summaryrefslogtreecommitdiff
path: root/wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
diff options
context:
space:
mode:
authorTorsten Grote <t@grobox.de>2022-09-27 17:56:05 -0300
committerTorsten Grote <t@grobox.de>2023-03-28 13:25:30 -0300
commitffe67691fe7ad995113eacb0ee5785f51e0051de (patch)
tree78e687a1a665a73547f34ea699787a99dc342ae2 /wallet/src/main/java/net/taler/wallet/pending/PendingOperationsManager.kt
parent8c098d96fc2c0e2d4fa96561f44980e0df5dad87 (diff)
downloadtaler-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.kt45
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")
+ }
}
}