refactor: DRY for DLCWalletLoaderApi.loadWallet() (#5787)

* refactor: DRY for DLCWalletLoaderApi.loadWallet()

* Make loadWallet() private

* fix
This commit is contained in:
Chris Stewart 2024-11-25 12:45:29 -06:00 committed by GitHub
parent c6917b296b
commit ba8dd75312
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -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
}
val stopRescanF = stopRescan()
for {
_ <- stopCallbackF
_ <- stopRescanF
(dlcWallet, walletConfig, dlcConfig) <- loadWallet(
chainQueryApi = chainQueryApi, chainQueryApi = chainQueryApi,
nodeApi = nodeApi, nodeApi = nodeApi,
walletNameOpt = walletNameOpt, createCallbacks = CallbackUtil.createNeutrinoNodeCallbacksForWallet
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
}
val stopRescanF = stopRescan()
for {
_ <- stopCallbackF
_ <- stopRescanF
(dlcWallet, walletConfig, dlcConfig) <- loadWallet(
chainQueryApi = bitcoind, chainQueryApi = bitcoind,
nodeApi = nodeApi, nodeApi = nodeApi,
walletNameOpt = walletNameOpt, createCallbacks = CallbackUtil.createBitcoindNodeCallbacksForWallet
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)
}
} }
} }