From f4ab3116fe6bfdeff4b1e35fbd0540ba34360fa1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 16 Aug 2023 16:53:42 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../MockSelectedAppCurrencyStore.kt | 26 ------------------- .../appcurrency/SelectedAppCurrencyStore.kt | 2 ++ .../DefaultSelectedAppCurrencyStore.kt | 7 ++++- .../core/KeylessDataStoreDecorator.kt | 6 ++--- .../DefaultAppCurrencyRepository.kt | 21 ++++++++++----- .../repository/DefaultCurrenciesRepository.kt | 4 +-- 6 files changed, 27 insertions(+), 39 deletions(-) delete mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/MockSelectedAppCurrencyStore.kt diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/MockSelectedAppCurrencyStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/MockSelectedAppCurrencyStore.kt deleted file mode 100644 index 58f48aacc8..0000000000 --- a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/MockSelectedAppCurrencyStore.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.tangem.datasource.local.appcurrency - -import com.tangem.datasource.api.tangemTech.models.CurrenciesResponse -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf - -// TODO: Will be implemented in [REDACTED_TASK_KEY] task -internal class MockSelectedAppCurrencyStore : SelectedAppCurrencyStore { - - override fun get(): Flow { - return flowOf( - CurrenciesResponse.Currency( - id = "usd", - code = "USD", - name = "US Dollar", - unit = "$", - type = "fiat", - rateBTC = "", - ), - ) - } - - override suspend fun store(item: CurrenciesResponse.Currency) { - /* no-op */ - } -} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/SelectedAppCurrencyStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/SelectedAppCurrencyStore.kt index e1fbad8329..80b95f3fb2 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/SelectedAppCurrencyStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/SelectedAppCurrencyStore.kt @@ -8,4 +8,6 @@ interface SelectedAppCurrencyStore { fun get(): Flow suspend fun store(item: CurrenciesResponse.Currency) + + suspend fun isEmpty(): Boolean } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt index c79bf3045b..7cdf82b1d7 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/appcurrency/implementation/DefaultSelectedAppCurrencyStore.kt @@ -7,4 +7,9 @@ import com.tangem.datasource.local.datastore.core.StringKeyDataStore internal class DefaultSelectedAppCurrencyStore( dataStore: StringKeyDataStore, -) : SelectedAppCurrencyStore, KeylessDataStoreDecorator(dataStore) \ No newline at end of file +) : SelectedAppCurrencyStore, KeylessDataStoreDecorator(dataStore) { + + override suspend fun isEmpty(): Boolean { + return getSyncOrNull() == null + } +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt index 3d567967cf..5e74e2f386 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/datastore/core/KeylessDataStoreDecorator.kt @@ -10,15 +10,15 @@ internal abstract class KeylessDataStoreDecorator( return STRING_KEY } - fun get(): Flow { + open fun get(): Flow { return get(Unit) } - suspend fun getSyncOrNull(): Value? { + open suspend fun getSyncOrNull(): Value? { return getSyncOrNull(Unit) } - suspend fun store(item: Value) { + open suspend fun store(item: Value) { store(Unit, item) } diff --git a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt index 8a780ba151..c2fe02a2b5 100644 --- a/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt +++ b/data/app-currency/src/main/kotlin/com/tangem/data/appcurrency/DefaultAppCurrencyRepository.kt @@ -10,9 +10,9 @@ import com.tangem.domain.appcurrency.model.AppCurrency import com.tangem.domain.appcurrency.repository.AppCurrencyRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.channelFlow import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.onEmpty +import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.joda.time.Duration import timber.log.Timber @@ -27,11 +27,18 @@ internal class DefaultAppCurrencyRepository( private val appCurrencyConverter = AppCurrencyConverter() - override fun getSelectedAppCurrency(): Flow { - return selectedAppCurrencyStore.get() - .onEmpty { fetchDefaultAppCurrency() } - .map(appCurrencyConverter::convert) - .flowOn(dispatchers.io) + override fun getSelectedAppCurrency(): Flow = channelFlow { + launch(dispatchers.io) { + selectedAppCurrencyStore.get() + .map(appCurrencyConverter::convert) + .collect(::send) + } + + launch(dispatchers.io) { + if (selectedAppCurrencyStore.isEmpty()) { + fetchDefaultAppCurrency() + } + } } override suspend fun getAvailableAppCurrencies(): List { diff --git a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt index 36abfd1d54..b2ff23a3bc 100644 --- a/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt +++ b/data/tokens/src/main/kotlin/com/tangem/data/tokens/repository/DefaultCurrenciesRepository.kt @@ -8,8 +8,8 @@ import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.UserTokensResponse import com.tangem.datasource.local.token.UserTokensStore import com.tangem.datasource.local.userwallet.UserWalletsStore -import com.tangem.domain.core.error.DataError import com.tangem.domain.common.util.derivationStyleProvider +import com.tangem.domain.core.error.DataError import com.tangem.domain.demo.DemoConfig import com.tangem.domain.tokens.models.CryptoCurrency import com.tangem.domain.tokens.repository.CurrenciesRepository @@ -164,7 +164,7 @@ internal class DefaultCurrenciesRepository( tangemTechApi.saveUserTokens(userWallet.walletId.stringValue, response) } else { - throw error + Timber.e(error, "Unable to fetch currencies for: ${userWallet.walletId}") } }