mirror of
https://github.com/bitcoin-s/bitcoin-s.git
synced 2025-03-03 18:47:38 +01:00
refactor: DRY for DLCWalletLoaderApi.loadWallet()
(#5787)
* refactor: DRY for DLCWalletLoaderApi.loadWallet() * Make loadWallet() private * fix
This commit is contained in:
parent
c6917b296b
commit
ba8dd75312
1 changed files with 60 additions and 64 deletions
|
@ -47,7 +47,7 @@ sealed trait DLCWalletLoaderApi
|
||||||
aesPasswordOpt: Option[AesPassword]
|
aesPasswordOpt: Option[AesPassword]
|
||||||
): Future[(WalletHolder, WalletAppConfig, DLCAppConfig)]
|
): Future[(WalletHolder, WalletAppConfig, DLCAppConfig)]
|
||||||
|
|
||||||
protected def loadWallet(
|
private def loadWallet(
|
||||||
chainQueryApi: ChainQueryApi,
|
chainQueryApi: ChainQueryApi,
|
||||||
nodeApi: NodeApi,
|
nodeApi: NodeApi,
|
||||||
walletNameOpt: Option[String],
|
walletNameOpt: Option[String],
|
||||||
|
@ -263,6 +263,49 @@ sealed trait DLCWalletLoaderApi
|
||||||
()
|
()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private def stopNodeCallbacks(nodeCallbacks: NodeCallbacks): Future[Unit] = {
|
||||||
|
nodeCallbacks match {
|
||||||
|
case stream: NodeCallbackStreamManager =>
|
||||||
|
stream.stop()
|
||||||
|
case _: NodeCallbacks =>
|
||||||
|
Future.unit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected def loadHelper(
|
||||||
|
walletNameOpt: Option[String],
|
||||||
|
aesPasswordOpt: Option[AesPassword],
|
||||||
|
nodeConf: NodeAppConfig,
|
||||||
|
chainQueryApi: ChainQueryApi,
|
||||||
|
nodeApi: NodeApi,
|
||||||
|
createCallbacks: DLCNeutrinoHDWalletApi => Future[
|
||||||
|
NodeCallbackStreamManager])
|
||||||
|
: Future[(WalletHolder, WalletAppConfig, DLCAppConfig)] = {
|
||||||
|
logger.info(s"Beginning to load=$walletNameOpt")
|
||||||
|
|
||||||
|
for {
|
||||||
|
_ <- stopRescan()
|
||||||
|
_ <- stopNodeCallbacks(nodeConf.callBacks)
|
||||||
|
(dlcWallet, walletConfig, dlcConfig) <- loadWallet(
|
||||||
|
chainQueryApi = chainQueryApi,
|
||||||
|
nodeApi = nodeApi,
|
||||||
|
walletNameOpt = walletNameOpt,
|
||||||
|
aesPasswordOpt = aesPasswordOpt
|
||||||
|
)
|
||||||
|
_ <- stopOldWalletAppConfig(walletConfig)
|
||||||
|
_ <- stopOldDLCAppConfig(dlcConfig)
|
||||||
|
_ <- walletHolder.replaceWallet(dlcWallet)
|
||||||
|
nodeCallbacks <- createCallbacks(dlcWallet)
|
||||||
|
_ = nodeConf.replaceCallbacks(nodeCallbacks)
|
||||||
|
_ <- updateWalletName(walletNameOpt)
|
||||||
|
rescanState <- restartRescanIfNeeded(walletHolder.rescanHandling)
|
||||||
|
_ = setRescanState(rescanState)
|
||||||
|
} yield {
|
||||||
|
logger.info(s"Done loading=$walletNameOpt")
|
||||||
|
(walletHolder, walletConfig, dlcConfig)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case class DLCWalletNeutrinoBackendLoader(
|
case class DLCWalletNeutrinoBackendLoader(
|
||||||
|
@ -273,7 +316,6 @@ case class DLCWalletNeutrinoBackendLoader(
|
||||||
override val conf: BitcoinSAppConfig,
|
override val conf: BitcoinSAppConfig,
|
||||||
override val system: ActorSystem
|
override val system: ActorSystem
|
||||||
) extends DLCWalletLoaderApi {
|
) extends DLCWalletLoaderApi {
|
||||||
import system.dispatcher
|
|
||||||
|
|
||||||
implicit private val nodeConf: NodeAppConfig = conf.nodeConf
|
implicit private val nodeConf: NodeAppConfig = conf.nodeConf
|
||||||
|
|
||||||
|
@ -283,36 +325,14 @@ case class DLCWalletNeutrinoBackendLoader(
|
||||||
walletNameOpt: Option[String],
|
walletNameOpt: Option[String],
|
||||||
aesPasswordOpt: Option[AesPassword]
|
aesPasswordOpt: Option[AesPassword]
|
||||||
): Future[(WalletHolder, WalletAppConfig, DLCAppConfig)] = {
|
): Future[(WalletHolder, WalletAppConfig, DLCAppConfig)] = {
|
||||||
val stopCallbackF = nodeConf.callBacks match {
|
loadHelper(
|
||||||
case stream: NodeCallbackStreamManager =>
|
walletNameOpt = walletNameOpt,
|
||||||
stream.stop()
|
aesPasswordOpt = aesPasswordOpt,
|
||||||
case _: NodeCallbacks =>
|
nodeConf = nodeConf,
|
||||||
Future.unit
|
chainQueryApi = chainQueryApi,
|
||||||
}
|
nodeApi = nodeApi,
|
||||||
val stopRescanF = stopRescan()
|
createCallbacks = CallbackUtil.createNeutrinoNodeCallbacksForWallet
|
||||||
|
)
|
||||||
for {
|
|
||||||
_ <- stopCallbackF
|
|
||||||
_ <- stopRescanF
|
|
||||||
(dlcWallet, walletConfig, dlcConfig) <- loadWallet(
|
|
||||||
chainQueryApi = chainQueryApi,
|
|
||||||
nodeApi = nodeApi,
|
|
||||||
walletNameOpt = walletNameOpt,
|
|
||||||
aesPasswordOpt = aesPasswordOpt
|
|
||||||
)
|
|
||||||
_ <- stopOldWalletAppConfig(walletConfig)
|
|
||||||
_ <- stopOldDLCAppConfig(dlcConfig)
|
|
||||||
_ <- walletHolder.replaceWallet(dlcWallet)
|
|
||||||
nodeCallbacks <-
|
|
||||||
CallbackUtil.createNeutrinoNodeCallbacksForWallet(walletHolder)
|
|
||||||
_ = nodeConf.replaceCallbacks(nodeCallbacks)
|
|
||||||
_ <- updateWalletName(walletNameOpt)
|
|
||||||
rescanState <- restartRescanIfNeeded(walletHolder.rescanHandling)
|
|
||||||
_ = setRescanState(rescanState)
|
|
||||||
} yield {
|
|
||||||
logger.info(s"Done loading wallet=$walletNameOpt")
|
|
||||||
(walletHolder, walletConfig, dlcConfig)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -326,43 +346,19 @@ case class DLCWalletBitcoindBackendLoader(
|
||||||
override val conf: BitcoinSAppConfig,
|
override val conf: BitcoinSAppConfig,
|
||||||
override val system: ActorSystem
|
override val system: ActorSystem
|
||||||
) extends DLCWalletLoaderApi {
|
) extends DLCWalletLoaderApi {
|
||||||
import system.dispatcher
|
|
||||||
implicit private val nodeConf: NodeAppConfig = conf.nodeConf
|
implicit private val nodeConf: NodeAppConfig = conf.nodeConf
|
||||||
|
|
||||||
override def load(
|
override def load(
|
||||||
walletNameOpt: Option[String],
|
walletNameOpt: Option[String],
|
||||||
aesPasswordOpt: Option[AesPassword]
|
aesPasswordOpt: Option[AesPassword]
|
||||||
): Future[(WalletHolder, WalletAppConfig, DLCAppConfig)] = {
|
): Future[(WalletHolder, WalletAppConfig, DLCAppConfig)] = {
|
||||||
val stopCallbackF = nodeConf.callBacks match {
|
loadHelper(
|
||||||
case stream: NodeCallbackStreamManager =>
|
walletNameOpt = walletNameOpt,
|
||||||
stream.stop()
|
aesPasswordOpt = aesPasswordOpt,
|
||||||
case _: NodeCallbacks =>
|
nodeConf = nodeConf,
|
||||||
Future.unit
|
chainQueryApi = bitcoind,
|
||||||
}
|
nodeApi = nodeApi,
|
||||||
val stopRescanF = stopRescan()
|
createCallbacks = CallbackUtil.createBitcoindNodeCallbacksForWallet
|
||||||
for {
|
)
|
||||||
_ <- stopCallbackF
|
|
||||||
_ <- stopRescanF
|
|
||||||
(dlcWallet, walletConfig, dlcConfig) <- loadWallet(
|
|
||||||
chainQueryApi = bitcoind,
|
|
||||||
nodeApi = nodeApi,
|
|
||||||
walletNameOpt = walletNameOpt,
|
|
||||||
aesPasswordOpt = aesPasswordOpt
|
|
||||||
)
|
|
||||||
|
|
||||||
_ <- stopOldWalletAppConfig(walletConfig)
|
|
||||||
_ <- stopOldDLCAppConfig(dlcConfig)
|
|
||||||
nodeCallbacks <- CallbackUtil.createBitcoindNodeCallbacksForWallet(
|
|
||||||
walletHolder
|
|
||||||
)
|
|
||||||
_ = nodeConf.replaceCallbacks(nodeCallbacks)
|
|
||||||
_ <- walletHolder.replaceWallet(dlcWallet)
|
|
||||||
// do something with possible rescan?
|
|
||||||
rescanState <- restartRescanIfNeeded(walletHolder.rescanHandling)
|
|
||||||
_ = setRescanState(rescanState)
|
|
||||||
} yield {
|
|
||||||
logger.info(s"Done loading wallet=$walletNameOpt")
|
|
||||||
(walletHolder, walletConfig, dlcConfig)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue