Updated on 2026-08-14
This commit is contained in:
parent
8b75e37e30
commit
a9bca131c3
386 changed files with 1369 additions and 1347 deletions
|
|
@ -45,7 +45,6 @@ dependencies {
|
|||
// region Other libraries
|
||||
implementation(deps.androidx.datastore)
|
||||
implementation(deps.moshi)
|
||||
implementation(deps.timber)
|
||||
// endregion
|
||||
|
||||
// region Tests
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ package com.tangem.data.networks.converters
|
|||
import com.tangem.datasource.local.network.entity.NetworkStatusDM
|
||||
import com.tangem.domain.models.network.NetworkAddress
|
||||
import com.tangem.utils.converter.TwoWayConverter
|
||||
import timber.log.Timber
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
|
||||
/**
|
||||
* Converter from [NetworkAddressConverter.Value] to [NetworkAddress] and vice versa
|
||||
|
|
@ -58,7 +58,7 @@ internal object NetworkAddressConverter : TwoWayConverter<NetworkAddressConverte
|
|||
}
|
||||
|
||||
if (address.value.isBlank()) {
|
||||
Timber.w("Address value is blank")
|
||||
TangemLogger.w("Address value is blank")
|
||||
}
|
||||
|
||||
return NetworkAddress.Address(value = address.value, type = type)
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ import com.tangem.domain.models.network.Network
|
|||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
import javax.inject.Inject
|
||||
import javax.inject.Singleton
|
||||
|
||||
|
|
@ -63,8 +63,8 @@ internal class CommonNetworkStatusFetcher @Inject constructor(
|
|||
|
||||
networksStatusesStore.storeStatus(userWalletId = userWalletId, status = status)
|
||||
}
|
||||
.onLeft {
|
||||
Timber.e("Failed to fetch network status for $userWalletId [${network.rawId}]: $it")
|
||||
.onLeft { throwable ->
|
||||
TangemLogger.e("Failed to fetch network status for $userWalletId [${network.rawId}]", throwable)
|
||||
networksStatusesStore.setSourceAsOnlyCache(userWalletId = userWalletId, network = network)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@ import com.tangem.domain.core.flow.FlowProducerTools
|
|||
import com.tangem.domain.models.network.NetworkStatus
|
||||
import com.tangem.domain.networks.multi.MultiNetworkStatusProducer
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
import kotlinx.coroutines.flow.*
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
* Default implementation of [MultiNetworkStatusProducer]
|
||||
|
|
@ -43,7 +43,7 @@ internal class DefaultMultiNetworkStatusProducer @AssistedInject constructor(
|
|||
val userWallet = userWalletsListRepository.getSyncOrNull(params.userWalletId)
|
||||
|
||||
if (userWallet == null) {
|
||||
Timber.e("Unable to get UserWallet with provided ID: ${params.userWalletId}")
|
||||
TangemLogger.e("Unable to get UserWallet with provided ID: ${params.userWalletId}")
|
||||
return@mapNotNull null
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
package com.tangem.data.networks.repository
|
||||
|
||||
import com.tangem.domain.common.tokens.CardCryptoCurrencyFactory
|
||||
import com.tangem.data.networks.store.NetworksStatusesStore
|
||||
import com.tangem.data.networks.store.storeStatus
|
||||
import com.tangem.data.networks.utils.NetworkStatusFactory
|
||||
import com.tangem.domain.common.tokens.CardCryptoCurrencyFactory
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.models.network.CryptoCurrencyAddress
|
||||
import com.tangem.domain.models.network.Network
|
||||
|
|
@ -11,8 +11,8 @@ import com.tangem.domain.models.wallet.UserWalletId
|
|||
import com.tangem.domain.networks.repository.NetworksRepository
|
||||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
* Default implementation of [NetworksRepository]
|
||||
|
|
@ -36,8 +36,8 @@ internal class DefaultNetworksRepository(
|
|||
val currencies = runCatching {
|
||||
cardCryptoCurrencyFactory.create(userWalletId = userWalletId, network = network)
|
||||
}
|
||||
.getOrElse {
|
||||
Timber.e(it, "Unable to create wallet currencies")
|
||||
.getOrElse { error ->
|
||||
TangemLogger.e("Unable to create wallet currencies", error)
|
||||
return@withContext
|
||||
}
|
||||
|
||||
|
|
@ -50,8 +50,8 @@ internal class DefaultNetworksRepository(
|
|||
network: Network,
|
||||
): List<CryptoCurrencyAddress> {
|
||||
return runCatching { cardCryptoCurrencyFactory.create(userWalletId = userWalletId, network = network) }
|
||||
.getOrElse {
|
||||
Timber.e(it, "Unable to create wallet currencies")
|
||||
.getOrElse { error ->
|
||||
TangemLogger.e("Unable to create wallet currencies", error)
|
||||
return emptyList()
|
||||
}
|
||||
.map { currency ->
|
||||
|
|
@ -67,8 +67,8 @@ internal class DefaultNetworksRepository(
|
|||
network: Network.RawID,
|
||||
): List<CryptoCurrencyAddress> {
|
||||
return runCatching { cardCryptoCurrencyFactory.createByRawId(userWalletId = userWalletId, network = network) }
|
||||
.getOrElse {
|
||||
Timber.e(it, "Unable to create wallet currencies")
|
||||
.getOrElse { error ->
|
||||
TangemLogger.e("Unable to create wallet currencies", error)
|
||||
return emptyList()
|
||||
}
|
||||
.map { currency ->
|
||||
|
|
|
|||
|
|
@ -7,15 +7,17 @@ import com.tangem.data.networks.converters.SimpleNetworkStatusConverter
|
|||
import com.tangem.data.networks.models.SimpleNetworkStatus
|
||||
import com.tangem.datasource.local.datastore.RuntimeSharedStore
|
||||
import com.tangem.datasource.local.network.entity.NetworkStatusDM
|
||||
import com.tangem.utils.coroutines.AppCoroutineScope
|
||||
import com.tangem.domain.models.StatusSource
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.models.network.NetworkStatus
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.utils.coroutines.AppCoroutineScope
|
||||
import com.tangem.utils.extensions.addOrReplace
|
||||
import kotlinx.coroutines.*
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import kotlinx.coroutines.coroutineScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.*
|
||||
import timber.log.Timber
|
||||
import kotlinx.coroutines.launch
|
||||
import java.io.File
|
||||
|
||||
internal typealias WalletIdWithSimpleStatus = Map<String, Set<SimpleNetworkStatus>>
|
||||
|
|
@ -45,7 +47,7 @@ internal class DefaultNetworksStatusesStore(
|
|||
oldFile.delete()
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Timber.e(e, "Error while deleting old networks statuses datastore file")
|
||||
TangemLogger.e("Error while deleting old networks statuses datastore file", e)
|
||||
}
|
||||
|
||||
val cachedStatuses = persistenceDataStore.data.firstOrNull() ?: return@launch
|
||||
|
|
@ -89,7 +91,7 @@ internal class DefaultNetworksStatusesStore(
|
|||
ifNotFound: (Network.ID) -> SimpleNetworkStatus?,
|
||||
) {
|
||||
if (networks.isEmpty()) {
|
||||
Timber.d("Nothing to update: networks are empty")
|
||||
TangemLogger.d("Nothing to update: networks are empty")
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.tangem.domain.models.StatusSource
|
|||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.domain.models.network.NetworkStatus
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import timber.log.Timber
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
|
||||
/**
|
||||
* Store actual network [status] by [userWalletId].
|
||||
|
|
@ -41,14 +41,14 @@ internal suspend fun NetworksStatusesStore.storeStatus(userWalletId: UserWalletI
|
|||
internal suspend fun NetworksStatusesStore.storeSuccess(userWalletId: UserWalletId, status: NetworkStatus) {
|
||||
if (status.value is NetworkStatus.Unreachable) {
|
||||
val message = "Use storeError method to save unreachable status"
|
||||
Timber.d(message)
|
||||
TangemLogger.d(message)
|
||||
|
||||
error(message)
|
||||
}
|
||||
|
||||
if (status.value.source != StatusSource.ACTUAL) {
|
||||
val message = "Method storeActual can be called only with StatusSource.ACTUAL"
|
||||
Timber.d(message)
|
||||
TangemLogger.d(message)
|
||||
|
||||
error(message)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,10 +8,10 @@ import com.tangem.domain.networks.utils.NetworksCleaner
|
|||
import com.tangem.domain.walletmanager.WalletManagersFacade
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.coroutines.runSuspendCatching
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.awaitAll
|
||||
import kotlinx.coroutines.withContext
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
* Default implementation of [NetworksCleaner].
|
||||
|
|
@ -30,7 +30,7 @@ internal class DefaultNetworksCleaner(
|
|||
|
||||
override suspend fun invoke(userWalletId: UserWalletId, currencies: List<CryptoCurrency>) {
|
||||
if (currencies.isEmpty()) {
|
||||
Timber.d("No currencies to clear for wallet: $userWalletId")
|
||||
TangemLogger.d("No currencies to clear for wallet: $userWalletId")
|
||||
return
|
||||
}
|
||||
|
||||
|
|
@ -49,7 +49,7 @@ internal class DefaultNetworksCleaner(
|
|||
runSuspendCatching {
|
||||
networksStatusesStore.clear(userWalletId = userWalletId, networks = networks)
|
||||
}
|
||||
.onFailure { Timber.e(it, "Failed to clear network statuses for wallet: $userWalletId") }
|
||||
.onFailure { TangemLogger.e("Failed to clear network statuses for wallet: $userWalletId", it) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +63,7 @@ internal class DefaultNetworksCleaner(
|
|||
walletManagersFacade.remove(userWalletId = userWalletId, networks = networks)
|
||||
}
|
||||
.onFailure {
|
||||
Timber.e(it, "Failed to remove networks from Blockchain SDK for wallet: $userWalletId")
|
||||
TangemLogger.e("Failed to remove networks from Blockchain SDK for wallet: $userWalletId", it)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -72,7 +72,7 @@ internal class DefaultNetworksCleaner(
|
|||
walletManagersFacade.removeTokens(userWalletId = userWalletId, tokens = tokens)
|
||||
}
|
||||
.onFailure {
|
||||
Timber.e(it, "Failed to remove tokens from Blockchain SDK for wallet: $userWalletId")
|
||||
TangemLogger.e("Failed to remove tokens from Blockchain SDK for wallet: $userWalletId", it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import com.tangem.domain.models.network.NetworkAddress
|
|||
import com.tangem.domain.models.network.NetworkStatus
|
||||
import com.tangem.domain.models.network.TxInfo
|
||||
import com.tangem.domain.models.yield.supply.YieldSupplyStatus
|
||||
import timber.log.Timber
|
||||
import com.tangem.utils.logging.TangemLogger
|
||||
|
||||
/** Factory for creating [NetworkStatus] */
|
||||
object NetworkStatusFactory {
|
||||
|
|
@ -104,7 +104,7 @@ object NetworkStatusFactory {
|
|||
}
|
||||
|
||||
if (amount == null) {
|
||||
Timber.w("Unable to find amount for cryptocurrency: $currency")
|
||||
TangemLogger.w("Unable to find amount for cryptocurrency: $currency")
|
||||
currency.id to NetworkStatus.Amount.NotFound
|
||||
} else {
|
||||
currency.id to NetworkStatus.Amount.Loaded(amount.value)
|
||||
|
|
@ -129,7 +129,7 @@ object NetworkStatusFactory {
|
|||
}
|
||||
|
||||
if (amount == null) {
|
||||
Timber.w("Unable to find amount for cryptocurrency: $currency")
|
||||
TangemLogger.w("Unable to find amount for cryptocurrency: $currency")
|
||||
currency.id to null
|
||||
} else {
|
||||
currency.id to amount.yieldSupplyStatus
|
||||
|
|
@ -191,7 +191,7 @@ object NetworkStatusFactory {
|
|||
}
|
||||
|
||||
if (address.value.isBlank()) {
|
||||
Timber.w("Address value is blank")
|
||||
TangemLogger.w("Address value is blank")
|
||||
}
|
||||
|
||||
return NetworkAddress.Address(address.value, type)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue