Updated on 2026-08-14

This commit is contained in:
Tangem 2026-04-02 10:24:41 +03:00
commit af09ce9ca4
877 changed files with 16091 additions and 6613 deletions

View file

@ -45,7 +45,6 @@ dependencies {
// region Other libraries
implementation(deps.androidx.datastore)
implementation(deps.moshi)
implementation(deps.timber)
// endregion
// region Tests

View file

@ -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)

View file

@ -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)
}
}

View file

@ -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
}

View file

@ -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 ->

View file

@ -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
}

View file

@ -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)
}

View file

@ -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)
}
}
}

View file

@ -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)