@@ -594,6 +594,16 @@ pub fn handle_offline_wallet_subcommand(
594594 }
595595}
596596
597+ #[ cfg( feature = "payjoin" ) ]
598+ pub fn open_payjoin_db (
599+ datadir : Option < std:: path:: PathBuf > ,
600+ ) -> Result < std:: sync:: Arc < crate :: payjoin:: db:: Database > , Error > {
601+ use crate :: payjoin:: db:: { DB_FILENAME , Database } ;
602+ let home_dir = prepare_home_dir ( datadir) ?;
603+ let db_path = home_dir. join ( DB_FILENAME ) ;
604+ Ok ( std:: sync:: Arc :: new ( Database :: create ( & db_path) ?) )
605+ }
606+
597607/// Execute an online wallet sub-command
598608///
599609/// Online wallet sub-commands are described in [`OnlineWalletSubCommand`].
@@ -607,6 +617,7 @@ pub(crate) async fn handle_online_wallet_subcommand(
607617 wallet : & mut Wallet ,
608618 client : & BlockchainClient ,
609619 online_subcommand : OnlineWalletSubCommand ,
620+ datadir : Option < std:: path:: PathBuf > ,
610621) -> Result < String , Error > {
611622 match online_subcommand {
612623 FullScan {
@@ -724,7 +735,8 @@ pub(crate) async fn handle_online_wallet_subcommand(
724735 max_fee_rate,
725736 } => {
726737 let relay_manager = Arc :: new ( Mutex :: new ( RelayManager :: new ( ) ) ) ;
727- let mut payjoin_manager = PayjoinManager :: new ( wallet, relay_manager) ;
738+ let db = open_payjoin_db ( datadir. clone ( ) ) ?;
739+ let mut payjoin_manager = PayjoinManager :: new ( wallet, relay_manager, db) ;
728740 return payjoin_manager
729741 . receive_payjoin ( amount, directory, max_fee_rate, ohttp_relay, client)
730742 . await ;
@@ -735,11 +747,27 @@ pub(crate) async fn handle_online_wallet_subcommand(
735747 fee_rate,
736748 } => {
737749 let relay_manager = Arc :: new ( Mutex :: new ( RelayManager :: new ( ) ) ) ;
738- let mut payjoin_manager = PayjoinManager :: new ( wallet, relay_manager) ;
750+ let db = open_payjoin_db ( datadir. clone ( ) ) ?;
751+ let mut payjoin_manager = PayjoinManager :: new ( wallet, relay_manager, db) ;
739752 return payjoin_manager
740753 . send_payjoin ( uri, fee_rate, ohttp_relay, client)
741754 . await ;
742755 }
756+ ResumePayjoin {
757+ directory,
758+ ohttp_relay,
759+ session_id,
760+ } => {
761+ let relay_manager = Arc :: new ( Mutex :: new ( RelayManager :: new ( ) ) ) ;
762+ let db = open_payjoin_db ( datadir) ?;
763+ let mut payjoin_manager = PayjoinManager :: new ( wallet, relay_manager, db) ;
764+ return payjoin_manager
765+ . resume_payjoins ( directory, ohttp_relay, session_id, client)
766+ . await ;
767+ }
768+ PayjoinHistory => {
769+ crate :: payjoin:: PayjoinManager :: history ( datadir) ;
770+ }
743771 }
744772}
745773
@@ -1210,7 +1238,7 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12101238 wallet,
12111239 subcommand : WalletSubCommand :: OnlineWalletSubCommand ( online_subcommand) ,
12121240 } => {
1213- let home_dir = prepare_home_dir ( cli_opts. datadir ) ?;
1241+ let home_dir = prepare_home_dir ( cli_opts. datadir . clone ( ) ) ?;
12141242
12151243 let ( wallet_opts, network) = load_wallet_config ( & home_dir, & wallet) ?;
12161244
@@ -1249,6 +1277,7 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12491277 & mut wallet,
12501278 & blockchain_client,
12511279 online_subcommand,
1280+ cli_opts. datadir . clone ( ) ,
12521281 )
12531282 . await ?;
12541283 wallet. persist ( & mut persister) ?;
@@ -1259,8 +1288,13 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12591288 let mut wallet = new_wallet ( network, wallet_opts) ?;
12601289 let blockchain_client =
12611290 crate :: utils:: new_blockchain_client ( wallet_opts, & wallet, database_path) ?;
1262- handle_online_wallet_subcommand ( & mut wallet, & blockchain_client, online_subcommand)
1263- . await ?
1291+ handle_online_wallet_subcommand (
1292+ & mut wallet,
1293+ & blockchain_client,
1294+ online_subcommand,
1295+ cli_opts. datadir . clone ( ) ,
1296+ )
1297+ . await ?
12641298 } ;
12651299 Ok ( result)
12661300 }
@@ -1453,9 +1487,14 @@ async fn respond(
14531487 } => {
14541488 let blockchain =
14551489 new_blockchain_client ( wallet_opts, wallet, _datadir) . map_err ( |e| e. to_string ( ) ) ?;
1456- let value = handle_online_wallet_subcommand ( wallet, & blockchain, online_subcommand)
1457- . await
1458- . map_err ( |e| e. to_string ( ) ) ?;
1490+ let value = handle_online_wallet_subcommand (
1491+ wallet,
1492+ & blockchain,
1493+ online_subcommand,
1494+ cli_opts. datadir . clone ( ) ,
1495+ )
1496+ . await
1497+ . map_err ( |e| e. to_string ( ) ) ?;
14591498 Some ( value)
14601499 }
14611500 ReplSubCommand :: Wallet {
0 commit comments