@@ -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,25 @@ 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 => crate :: payjoin:: PayjoinManager :: history ( datadir) ,
743769 }
744770}
745771
@@ -1210,7 +1236,7 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12101236 wallet,
12111237 subcommand : WalletSubCommand :: OnlineWalletSubCommand ( online_subcommand) ,
12121238 } => {
1213- let home_dir = prepare_home_dir ( cli_opts. datadir ) ?;
1239+ let home_dir = prepare_home_dir ( cli_opts. datadir . clone ( ) ) ?;
12141240
12151241 let ( wallet_opts, network) = load_wallet_config ( & home_dir, & wallet) ?;
12161242
@@ -1249,6 +1275,7 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12491275 & mut wallet,
12501276 & blockchain_client,
12511277 online_subcommand,
1278+ cli_opts. datadir . clone ( ) ,
12521279 )
12531280 . await ?;
12541281 wallet. persist ( & mut persister) ?;
@@ -1259,8 +1286,13 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12591286 let mut wallet = new_wallet ( network, wallet_opts) ?;
12601287 let blockchain_client =
12611288 crate :: utils:: new_blockchain_client ( wallet_opts, & wallet, database_path) ?;
1262- handle_online_wallet_subcommand ( & mut wallet, & blockchain_client, online_subcommand)
1263- . await ?
1289+ handle_online_wallet_subcommand (
1290+ & mut wallet,
1291+ & blockchain_client,
1292+ online_subcommand,
1293+ cli_opts. datadir . clone ( ) ,
1294+ )
1295+ . await ?
12641296 } ;
12651297 Ok ( result)
12661298 }
@@ -1453,9 +1485,14 @@ async fn respond(
14531485 } => {
14541486 let blockchain =
14551487 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 ( ) ) ?;
1488+ let value = handle_online_wallet_subcommand (
1489+ wallet,
1490+ & blockchain,
1491+ online_subcommand,
1492+ cli_opts. datadir . clone ( ) ,
1493+ )
1494+ . await
1495+ . map_err ( |e| e. to_string ( ) ) ?;
14591496 Some ( value)
14601497 }
14611498 ReplSubCommand :: Wallet {
0 commit comments