zcash-android-wallet-zcon1/zcash-android-wallet-app/app/src/main/java/cash/z/android/wallet/di/module/SynchronizerModule.kt

86 lines
3.0 KiB
Kotlin

package cash.z.android.wallet.di.module
import cash.z.android.wallet.BuildConfig
import cash.z.android.wallet.ZcashWalletApplication
import cash.z.android.wallet.sample.SampleProperties
import cash.z.android.wallet.sample.SampleProperties.COMPACT_BLOCK_PORT
import cash.z.android.wallet.sample.SampleProperties.COMPACT_BLOCK_SERVER
import cash.z.wallet.sdk.data.*
import cash.z.wallet.sdk.jni.JniConverter
import cash.z.wallet.sdk.secure.Wallet
import dagger.Module
import dagger.Provides
import javax.inject.Singleton
/**
* Module that contributes all the objects necessary for the synchronizer, which is basically everything that has
* application scope.
*/
@Module
internal object SynchronizerModule {
@JvmStatic
@Provides
@Singleton
fun provideTwig(): Twig = if (BuildConfig.DEBUG) TroubleshootingTwig() else SilentTwig()
@JvmStatic
@Provides
@Singleton
fun provideDownloader(twigger: Twig): CompactBlockStream {
return CompactBlockStream(COMPACT_BLOCK_SERVER, COMPACT_BLOCK_PORT, twigger)
}
@JvmStatic
@Provides
@Singleton
fun provideProcessor(application: ZcashWalletApplication, converter: JniConverter, twigger: Twig): CompactBlockProcessor {
return CompactBlockProcessor(application, converter, SampleProperties.wallet.cacheDbName, SampleProperties.wallet.dataDbName, logger = twigger)
}
@JvmStatic
@Provides
@Singleton
fun provideRepository(application: ZcashWalletApplication, converter: JniConverter, twigger: Twig): TransactionRepository {
return PollingTransactionRepository(application, SampleProperties.wallet.dataDbName, 10_000L, converter, twigger)
}
@JvmStatic
@Provides
@Singleton
fun provideWallet(application: ZcashWalletApplication, converter: JniConverter, twigger: Twig): Wallet {
return Wallet(converter, application.getDatabasePath(SampleProperties.wallet.dataDbName).absolutePath, "${application.cacheDir.absolutePath}/params", seedProvider = SampleProperties.wallet.seedProvider, spendingKeyProvider = SampleProperties.wallet.spendingKeyProvider, logger = twigger)
}
@JvmStatic
@Provides
@Singleton
fun provideManager(wallet: Wallet, repository: TransactionRepository, downloader: CompactBlockStream, twigger: Twig): ActiveTransactionManager {
return ActiveTransactionManager(repository, downloader.connection, wallet, twigger)
}
@JvmStatic
@Provides
@Singleton
fun provideJniConverter(): JniConverter {
return JniConverter().also {
if (BuildConfig.DEBUG) it.initLogs()
}
}
@JvmStatic
@Provides
@Singleton
fun provideSynchronizer(
downloader: CompactBlockStream,
processor: CompactBlockProcessor,
repository: TransactionRepository,
manager: ActiveTransactionManager,
wallet: Wallet,
twigger: Twig
): Synchronizer {
return Synchronizer(downloader, processor, repository, manager, wallet, logger = twigger)
}
}