Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-18 19:38:52 +08:00
parent d2b02493a8
commit 63da6a3729
4 changed files with 88 additions and 131 deletions

View file

@ -3,7 +3,6 @@ package com.tangem.blockchainsdk.loader
import androidx.core.util.PatternsCompat
import com.google.firebase.crashlytics.FirebaseCrashlytics
import com.tangem.blockchainsdk.BlockchainProvidersResponse
import com.tangem.datasource.api.common.AuthProvider
import com.tangem.datasource.api.tangemTech.TangemTechServiceApi
import com.tangem.datasource.asset.loader.AssetLoader
import com.tangem.datasource.config.models.ProviderModel
@ -17,7 +16,6 @@ import javax.inject.Singleton
* Loader of [BlockchainProvidersResponse]
*
* @property tangemTechServiceApi tangem tech api
* @property authProvider auth provider
* @property assetLoader asset loader for local config loading
* @property dispatchers dispatchers
*
@ -26,7 +24,6 @@ import javax.inject.Singleton
@Singleton
internal class BlockchainProvidersResponseLoader @Inject constructor(
private val tangemTechServiceApi: TangemTechServiceApi,
private val authProvider: AuthProvider,
private val assetLoader: AssetLoader,
private val dispatchers: CoroutineDispatcherProvider,
) {
@ -51,12 +48,7 @@ internal class BlockchainProvidersResponseLoader @Inject constructor(
return assetLoader.load<BlockchainProvidersResponse>(fileName = PROVIDER_TYPES_FILE_NAME)
}
private suspend fun loadRemote(): BlockchainProvidersResponse {
return tangemTechServiceApi.getBlockchainProviders(
cardPublicKey = authProvider.getCardPublicKey(),
cardId = authProvider.getCardId(),
)
}
private suspend fun loadRemote() = tangemTechServiceApi.getBlockchainProviders()
/** Merge blockchains with non-empty providers [remote] from remote with blockchains from local [local] */
private fun mergeResponses(
@ -87,7 +79,7 @@ internal class BlockchainProvidersResponseLoader @Inject constructor(
recordException(missingBlockchains = missingBlockchains + blockchainsWithoutProviders)
}
return result
return result.guaranteeUrlsEndWithSlash()
}
private fun List<ProviderModel>.filterUnsupportedProviders() = filter { it !is ProviderModel.UnsupportedType }
@ -118,6 +110,24 @@ internal class BlockchainProvidersResponseLoader @Inject constructor(
firebaseCrashlytics.recordException(exception)
}
/*
* Example:
* https://qwe.com --> https://qwe.com/
*/
private fun BlockchainProvidersResponse.guaranteeUrlsEndWithSlash(): BlockchainProvidersResponse {
return mapValues {
it.value.map { provider -> provider.addSlashIfAbsent() }
}
}
private fun ProviderModel.addSlashIfAbsent(): ProviderModel {
return if (this is ProviderModel.Public && url.last() != '/') {
copy(url = "$url/")
} else {
this
}
}
private companion object {
const val PROVIDER_TYPES_FILE_NAME = "tangem-app-config/providers_order"