From 53d99e46e6b34d4437f46266cb797a65c0736803 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Thu, 27 Aug 2020 16:42:03 -0300 Subject: [cashier] don't crash on unexpected network input --- .../net/taler/cashier/withdraw/WithdrawManager.kt | 56 ++++++++++++---------- 1 file changed, 32 insertions(+), 24 deletions(-) (limited to 'cashier/src/main/java/net/taler/cashier/withdraw') diff --git a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt index 9f3cf54..30ff3d8 100644 --- a/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt +++ b/cashier/src/main/java/net/taler/cashier/withdraw/WithdrawManager.kt @@ -54,10 +54,10 @@ class WithdrawManager( get() = viewModel.viewModelScope private val config - get() = viewModel.config + get() = viewModel.configManager.config private val currency: String? - get() = viewModel.currency.value + get() = viewModel.configManager.currency.value private var withdrawStatusCheck: Job? = null @@ -93,13 +93,17 @@ class WithdrawManager( val body = JSONObject(map) val result = when (val response = makeJsonPostRequest(url, body, config)) { is Success -> { - val talerUri = response.json.getString("taler_withdraw_uri") - val withdrawResult = WithdrawResult.Success( - id = response.json.getString("withdrawal_id"), - talerUri = talerUri, - qrCode = makeQrCode(talerUri) - ) - withdrawResult + try { + val talerUri = response.json.getString("taler_withdraw_uri") + val withdrawResult = WithdrawResult.Success( + id = response.json.getString("withdrawal_id"), + talerUri = talerUri, + qrCode = makeQrCode(talerUri) + ) + withdrawResult + } catch (e: Exception) { + WithdrawResult.Error(e.toString()) + } } is Error -> { if (response.statusCode > 0 && app.isOnline()) { @@ -147,25 +151,29 @@ class WithdrawManager( val response = makeJsonGetRequest(url, config) if (response !is Success) return@launch // ignore errors and continue trying val oldStatus = mWithdrawStatus.value - when { - response.json.getBoolean("aborted") -> { - cancelWithdrawStatusCheck() - mWithdrawStatus.postValue(WithdrawStatus.Aborted) - } - response.json.getBoolean("confirmation_done") -> { - if (oldStatus !is WithdrawStatus.Success) { + try { + when { + response.json.getBoolean("aborted") -> { cancelWithdrawStatusCheck() - mWithdrawStatus.postValue(WithdrawStatus.Success) - viewModel.getBalance() + mWithdrawStatus.postValue(WithdrawStatus.Aborted) } - } - response.json.getBoolean("selection_done") -> { - // only update status, if there's none, yet - // so we don't re-notify or overwrite newer status info - if (oldStatus == null) { - mWithdrawStatus.postValue(WithdrawStatus.SelectionDone(withdrawalId)) + response.json.getBoolean("confirmation_done") -> { + if (oldStatus !is WithdrawStatus.Success) { + cancelWithdrawStatusCheck() + mWithdrawStatus.postValue(WithdrawStatus.Success) + viewModel.getBalance() + } + } + response.json.getBoolean("selection_done") -> { + // only update status, if there's none, yet + // so we don't re-notify or overwrite newer status info + if (oldStatus == null) { + mWithdrawStatus.postValue(WithdrawStatus.SelectionDone(withdrawalId)) + } } } + } catch (e: Exception) { + mWithdrawStatus.postValue(WithdrawStatus.Error(e.toString())) } } -- cgit v1.2.3