@@ -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+ return crate :: payjoin:: PayjoinManager :: history ( datadir) ;
770+ }
743771 }
744772}
745773
@@ -1209,7 +1237,7 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12091237 wallet,
12101238 subcommand : WalletSubCommand :: OnlineWalletSubCommand ( online_subcommand) ,
12111239 } => {
1212- let home_dir = prepare_home_dir ( cli_opts. datadir ) ?;
1240+ let home_dir = prepare_home_dir ( cli_opts. datadir . clone ( ) ) ?;
12131241
12141242 let ( wallet_opts, network) = load_wallet_config ( & home_dir, & wallet) ?;
12151243
@@ -1248,6 +1276,7 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12481276 & mut wallet,
12491277 & blockchain_client,
12501278 online_subcommand,
1279+ cli_opts. datadir . clone ( ) ,
12511280 )
12521281 . await ?;
12531282 wallet. persist ( & mut persister) ?;
@@ -1258,8 +1287,13 @@ pub(crate) async fn handle_command(cli_opts: CliOpts) -> Result<String, Error> {
12581287 let mut wallet = new_wallet ( network, wallet_opts) ?;
12591288 let blockchain_client =
12601289 crate :: utils:: new_blockchain_client ( wallet_opts, & wallet, database_path) ?;
1261- handle_online_wallet_subcommand ( & mut wallet, & blockchain_client, online_subcommand)
1262- . await ?
1290+ handle_online_wallet_subcommand (
1291+ & mut wallet,
1292+ & blockchain_client,
1293+ online_subcommand,
1294+ cli_opts. datadir . clone ( ) ,
1295+ )
1296+ . await ?
12631297 } ;
12641298 Ok ( result)
12651299 }
@@ -1452,9 +1486,14 @@ async fn respond(
14521486 } => {
14531487 let blockchain =
14541488 new_blockchain_client ( wallet_opts, wallet, _datadir) . map_err ( |e| e. to_string ( ) ) ?;
1455- let value = handle_online_wallet_subcommand ( wallet, & blockchain, online_subcommand)
1456- . await
1457- . map_err ( |e| e. to_string ( ) ) ?;
1489+ let value = handle_online_wallet_subcommand (
1490+ wallet,
1491+ & blockchain,
1492+ online_subcommand,
1493+ cli_opts. datadir . clone ( ) ,
1494+ )
1495+ . await
1496+ . map_err ( |e| e. to_string ( ) ) ?;
14581497 Some ( value)
14591498 }
14601499 ReplSubCommand :: Wallet {
0 commit comments