From 6028376333344c90ba8dbaa75aad759b2915962d Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 15 May 2020 11:06:46 -0300 Subject: [wallet] cache transactions per currency --- .../wallet/transactions/TransactionManager.kt | 35 ++++++++++++++++------ 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'wallet/src/main/java/net/taler/wallet/transactions') diff --git a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt index c6c1ecd..f830aa1 100644 --- a/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt +++ b/wallet/src/main/java/net/taler/wallet/transactions/TransactionManager.kt @@ -17,6 +17,8 @@ package net.taler.wallet.transactions import android.util.Log +import androidx.annotation.UiThread +import androidx.annotation.WorkerThread import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.fasterxml.jackson.databind.ObjectMapper @@ -45,23 +47,38 @@ class TransactionManager( var selectedCurrency: String? = null var selectedTransaction: Transaction? = null - // TODO maybe cache transactions per currency? - private val mTransactions = MutableLiveData() - val transactions: LiveData = mTransactions + private val mTransactions = HashMap>() + val transactions: LiveData + @UiThread + get() { + val currency = selectedCurrency + check(currency != null) { "Did not select currency before getting transactions" } + return mTransactions.getOrPut(currency) { MutableLiveData() } + } + @UiThread fun loadTransactions() { - mProgress.postValue(true) - val request = JSONObject(mapOf("currency" to selectedCurrency)) + val currency = selectedCurrency ?: return + val liveData = mTransactions.getOrPut(currency) { + MutableLiveData() + } + if (liveData.value == null) mProgress.value = true + val request = JSONObject(mapOf("currency" to currency)) walletBackendApi.sendRequest("getTransactions", request) { isError, result -> scope.launch(Dispatchers.Default) { - onTransactionsLoaded(isError, result) + onTransactionsLoaded(liveData, isError, result) } } } - private fun onTransactionsLoaded(isError: Boolean, result: JSONObject) { + @WorkerThread + private fun onTransactionsLoaded( + liveData: MutableLiveData, + isError: Boolean, + result: JSONObject + ) { if (isError) { - mTransactions.postValue(TransactionsResult.Error) + liveData.postValue(TransactionsResult.Error) return } Log.e("TEST", result.toString(2)) // TODO remove once API finalized @@ -69,7 +86,7 @@ class TransactionManager( val transactions: LinkedList = mapper.readValue(transactionsArray) transactions.reverse() // show latest first mProgress.postValue(false) - mTransactions.postValue(TransactionsResult.Success(transactions)) + liveData.postValue(TransactionsResult.Success(transactions)) } } -- cgit v1.2.3