Updated on 2026-08-14
This commit is contained in:
parent
7907c61101
commit
861f650cd4
8 changed files with 56 additions and 91 deletions
|
|
@ -6,7 +6,9 @@ import com.tangem.blockchain.common.datastorage.BlockchainDataStorage
|
|||
import com.tangem.blockchain.common.logging.BlockchainSDKLogger
|
||||
import com.tangem.blockchainsdk.config.ConfigStorage
|
||||
import com.tangem.blockchainsdk.converters.BlockchainSDKConfigConverter
|
||||
import com.tangem.blockchainsdk.loader.ConfigLoader
|
||||
import com.tangem.datasource.asset.loader.AssetLoader
|
||||
import com.tangem.datasource.config.models.ConfigValueModel
|
||||
import com.tangem.libs.blockchain_sdk.BuildConfig
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.firstOrNull
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
|
@ -14,7 +16,7 @@ import kotlinx.coroutines.flow.map
|
|||
/**
|
||||
* Implementation of Blockchain SDK components factory
|
||||
*
|
||||
* @property configLoader config loader
|
||||
* @property assetLoader asset loader
|
||||
* @property configStorage config storage
|
||||
* @property accountCreator account creator
|
||||
* @property blockchainDataStorage blockchain data storage
|
||||
|
|
@ -23,7 +25,7 @@ import kotlinx.coroutines.flow.map
|
|||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal class DefaultBlockchainSDKFactory(
|
||||
private val configLoader: ConfigLoader,
|
||||
private val assetLoader: AssetLoader,
|
||||
private val configStorage: ConfigStorage,
|
||||
private val accountCreator: AccountCreator,
|
||||
private val blockchainDataStorage: BlockchainDataStorage,
|
||||
|
|
@ -33,7 +35,7 @@ internal class DefaultBlockchainSDKFactory(
|
|||
override val walletManagerFactory: Flow<WalletManagerFactory> by lazy(::createWalletManagerFactory)
|
||||
|
||||
override suspend fun init() {
|
||||
val configValueModel = configLoader.load() ?: return
|
||||
val configValueModel = assetLoader.load<ConfigValueModel>(CONFIG_FILE_NAME) ?: return
|
||||
|
||||
configStorage.store(
|
||||
config = BlockchainSDKConfigConverter.convert(value = configValueModel),
|
||||
|
|
@ -52,4 +54,9 @@ internal class DefaultBlockchainSDKFactory(
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
private companion object {
|
||||
|
||||
const val CONFIG_FILE_NAME = "tangem-app-config/config_${BuildConfig.ENVIRONMENT}"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,21 +1,15 @@
|
|||
package com.tangem.blockchainsdk.di
|
||||
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.tangem.blockchain.common.logging.BlockchainSDKLogger
|
||||
import com.tangem.blockchainsdk.BlockchainSDKFactory
|
||||
import com.tangem.blockchainsdk.DefaultBlockchainSDKFactory
|
||||
import com.tangem.blockchainsdk.accountcreator.DefaultAccountCreator
|
||||
import com.tangem.blockchainsdk.config.RuntimeConfigStorage
|
||||
import com.tangem.blockchainsdk.datastorage.DefaultBlockchainDataStorage
|
||||
import com.tangem.blockchainsdk.loader.ConfigLoader
|
||||
import com.tangem.blockchainsdk.loader.LocalConfigLoader
|
||||
import com.tangem.datasource.api.common.AuthProvider
|
||||
import com.tangem.datasource.api.tangemTech.TangemTechApi
|
||||
import com.tangem.datasource.asset.reader.AssetReader
|
||||
import com.tangem.datasource.di.SdkMoshi
|
||||
import com.tangem.datasource.asset.loader.AssetLoader
|
||||
import com.tangem.datasource.local.preferences.AppPreferencesStore
|
||||
import com.tangem.libs.blockchain_sdk.BuildConfig
|
||||
import com.tangem.utils.coroutines.AppCoroutineDispatcherProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import dagger.hilt.InstallIn
|
||||
|
|
@ -29,33 +23,18 @@ internal object BlockchainSDKFactoryModule {
|
|||
@Provides
|
||||
@Singleton
|
||||
fun provideBlockchainSDKFactory(
|
||||
@SdkMoshi moshi: Moshi,
|
||||
assetReader: AssetReader,
|
||||
dispatchers: AppCoroutineDispatcherProvider,
|
||||
assetLoader: AssetLoader,
|
||||
authProvider: AuthProvider,
|
||||
tangemTechApi: TangemTechApi,
|
||||
appPreferencesStore: AppPreferencesStore,
|
||||
blockchainSDKLogger: BlockchainSDKLogger,
|
||||
): BlockchainSDKFactory {
|
||||
return DefaultBlockchainSDKFactory(
|
||||
configLoader = createConfigLoader(moshi, assetReader, dispatchers),
|
||||
assetLoader = assetLoader,
|
||||
configStorage = RuntimeConfigStorage(),
|
||||
accountCreator = DefaultAccountCreator(authProvider, tangemTechApi),
|
||||
blockchainDataStorage = DefaultBlockchainDataStorage(appPreferencesStore),
|
||||
blockchainSDKLogger = blockchainSDKLogger,
|
||||
)
|
||||
}
|
||||
|
||||
private fun createConfigLoader(
|
||||
moshi: Moshi,
|
||||
assetReader: AssetReader,
|
||||
dispatchers: AppCoroutineDispatcherProvider,
|
||||
): ConfigLoader {
|
||||
return LocalConfigLoader(
|
||||
buildEnvironment = BuildConfig.ENVIRONMENT,
|
||||
moshi = moshi,
|
||||
assetReader = assetReader,
|
||||
dispatchers = dispatchers,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,14 +0,0 @@
|
|||
package com.tangem.blockchainsdk.loader
|
||||
|
||||
import com.tangem.datasource.config.models.ConfigValueModel
|
||||
|
||||
/**
|
||||
* Config loader
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
internal interface ConfigLoader {
|
||||
|
||||
/** Load config [ConfigValueModel] */
|
||||
suspend fun load(): ConfigValueModel?
|
||||
}
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
package com.tangem.blockchainsdk.loader
|
||||
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.adapter
|
||||
import com.tangem.datasource.asset.reader.AssetReader
|
||||
import com.tangem.datasource.config.models.ConfigValueModel
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.coroutines.runCatching
|
||||
import timber.log.Timber
|
||||
|
||||
/**
|
||||
* Local config loader
|
||||
*
|
||||
* @param buildEnvironment build environment that defines config file name
|
||||
* @param moshi moshi
|
||||
* @property assetReader asset reader
|
||||
* @property dispatchers dispatchers
|
||||
*/
|
||||
internal class LocalConfigLoader(
|
||||
buildEnvironment: String,
|
||||
moshi: Moshi,
|
||||
private val assetReader: AssetReader,
|
||||
private val dispatchers: CoroutineDispatcherProvider,
|
||||
) : ConfigLoader {
|
||||
|
||||
private val configFileName = "tangem-app-config/config_$buildEnvironment"
|
||||
|
||||
@OptIn(ExperimentalStdlibApi::class)
|
||||
private val adapter: JsonAdapter<ConfigValueModel> = moshi.adapter()
|
||||
|
||||
@Deprecated(message = "Use AssetReader instead")
|
||||
override suspend fun load(): ConfigValueModel? {
|
||||
return runCatching(dispatchers.io) {
|
||||
val json = assetReader.readJson(fileName = configFileName)
|
||||
adapter.fromJson(json)
|
||||
}
|
||||
.fold(
|
||||
onSuccess = { parsedConfig ->
|
||||
if (parsedConfig == null) Timber.e(IllegalStateException("Parsed config is null"))
|
||||
parsedConfig
|
||||
},
|
||||
onFailure = {
|
||||
Timber.e(it, "Failed to load config from assets")
|
||||
null
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue