@@ -80,10 +80,10 @@ use arkdropx_receiver::{
8080 } ,
8181 receive_files,
8282} ;
83- use dropx_sender :: {
84- SendFilesConnectingEvent , SendFilesRequest , SendFilesSendingEvent ,
85- SendFilesSubscriber , SenderConfig , SenderFile , SenderFileData ,
86- SenderProfile , send_files,
83+ use arkdropx_sender :: {
84+ SendFilesBubble , SendFilesConnectingEvent , SendFilesRequest ,
85+ SendFilesSendingEvent , SendFilesSubscriber , SenderConfig , SenderFile ,
86+ SenderFileData , SenderProfile , send_files,
8787 send_files_to:: {
8888 SendFilesToBubble , SendFilesToConnectingEvent , SendFilesToRequest ,
8989 SendFilesToSendingEvent , SendFilesToSubscriber , send_files_to,
@@ -153,12 +153,9 @@ impl FileSender {
153153 let subscriber = FileSendSubscriber :: new ( verbose) ;
154154 bubble. subscribe ( Arc :: new ( subscriber) ) ;
155155
156- // Display QR code and session info
157- display_session_info (
158- & bubble. get_ticket ( ) ,
159- bubble. get_confirmation ( ) ,
160- "Sender" ,
161- ) ;
156+ println ! ( "📦 Ready to send files!" ) ;
157+ print_qr_to_console ( & bubble) ?;
158+ println ! ( "⏳ Waiting for receiver... (Press Ctrl+C to cancel)" ) ;
162159
163160 tokio:: select! {
164161 _ = tokio:: signal:: ctrl_c( ) => {
@@ -221,6 +218,25 @@ fn print_qr_to_console(bubble: &SendFilesBubble) -> Result<()> {
221218 Ok ( ( ) )
222219}
223220
221+ fn print_ready_to_receive_qr ( ticket : & str , confirmation : u8 ) -> Result < ( ) > {
222+ let data =
223+ format ! ( "drop://send?ticket={ticket}&confirmation={confirmation}" ) ;
224+
225+ let code = QrCode :: new ( & data) ?;
226+ let image = code
227+ . render :: < char > ( )
228+ . quiet_zone ( false )
229+ . module_dimensions ( 2 , 1 )
230+ . build ( ) ;
231+
232+ println ! ( "\n QR Code for Transfer:" ) ;
233+ println ! ( "{}" , image) ;
234+ println ! ( "🎫 Ticket: {ticket}" ) ;
235+ println ! ( "🔒 Confirmation: {confirmation}\n " ) ;
236+
237+ Ok ( ( ) )
238+ }
239+
224240async fn wait_for_send_completion ( bubble : & arkdropx_sender:: SendFilesBubble ) {
225241 loop {
226242 if bubble. is_finished ( ) {
@@ -967,34 +983,16 @@ pub async fn run_receive_files(
967983 format ! ( "Invalid confirmation code: {confirmation}" )
968984 } ) ?;
969985
970- // Determine the output directory
971- let final_output_dir = match output_dir {
972- Some ( dir) => {
973- let path = PathBuf :: from ( & dir) ;
974-
975- // Save this directory as default if requested
976- if save_dir {
977- let mut config = CliConfig :: load ( ) ?;
978- config
979- . set_default_receive_dir ( dir. clone ( ) )
980- . with_context (
981- || "Failed to save default receive directory" ,
982- ) ?;
983- println ! ( "Saved '{}' as default receive directory" , dir) ;
984- }
985-
986- path
987- }
988- None => {
989- // Try to use saved default directory; otherwise use sensible
990- // fallback
991- let config = CliConfig :: load ( ) ?;
992- match config. get_default_receive_dir ( ) {
993- Some ( default_dir) => PathBuf :: from ( default_dir) ,
994- None => default_receive_dir_fallback ( ) ,
995- }
996- }
997- } ;
986+ if save_out {
987+ let mut config = AppConfig :: load ( ) ?;
988+ config. set_out_dir ( out_dir. clone ( ) ) . with_context (
989+ || "Failed to save default output receive directory" ,
990+ ) ?;
991+ println ! (
992+ "💾 Saved '{}' as default output receive directory" ,
993+ out_dir. display( )
994+ ) ;
995+ }
998996
999997 let receiver = FileReceiver :: new ( profile) ;
1000998 receiver
@@ -1618,23 +1616,12 @@ pub async fn run_ready_to_receive(
16181616 Some ( dir) => {
16191617 let path = PathBuf :: from ( & dir) ;
16201618 if save_dir {
1621- let mut config = CliConfig :: load ( ) ?;
1622- config
1623- . set_default_receive_dir ( dir. clone ( ) )
1624- . with_context (
1625- || "Failed to save default receive directory" ,
1626- ) ?;
1627- println ! ( "Saved '{}' as default receive directory" , dir) ;
1619+ set_default_out_dir ( path. clone ( ) ) ?;
1620+ println ! ( "💾 Saved '{}' as default receive directory" , dir) ;
16281621 }
16291622 path
16301623 }
1631- None => {
1632- let config = CliConfig :: load ( ) ?;
1633- match config. get_default_receive_dir ( ) {
1634- Some ( default_dir) => PathBuf :: from ( default_dir) ,
1635- None => default_receive_dir_fallback ( ) ,
1636- }
1637- }
1624+ None => get_default_out_dir ( ) ,
16381625 } ;
16391626
16401627 // Create output directory if it doesn't exist
@@ -1672,26 +1659,27 @@ pub async fn run_ready_to_receive(
16721659 let confirmation = bubble. get_confirmation ( ) ;
16731660
16741661 // Display QR code and session info
1675- display_session_info ( & ticket, confirmation, "Receiver" ) ;
1676-
1677- println ! ( "Files will be saved to: {}" , receiving_path. display( ) ) ;
1662+ println ! ( "📦 Ready to receive files!" ) ;
1663+ print_ready_to_receive_qr ( & ticket, confirmation) ?;
1664+ println ! ( "📁 Files will be saved to: {}" , receiving_path. display( ) ) ;
1665+ println ! ( "⏳ Waiting for sender... (Press Ctrl+C to cancel)" ) ;
16781666
16791667 let subscriber =
16801668 ReadyToReceiveSubscriberImpl :: new ( receiving_path. clone ( ) , verbose) ;
16811669 bubble. subscribe ( Arc :: new ( subscriber) ) ;
16821670
16831671 tokio:: select! {
16841672 _ = tokio:: signal:: ctrl_c( ) => {
1685- println!( "Cancelling file transfer..." ) ;
1673+ println!( "🚫 Cancelling file transfer..." ) ;
16861674 let _ = bubble. cancel( ) . await ;
1687- println!( "Transfer cancelled" ) ;
1688- std:: process:: exit( 0 ) ;
1675+ println!( "✅ Transfer cancelled" ) ;
16891676 }
16901677 _ = wait_for_ready_to_receive_completion( & bubble) => {
1691- println!( "All files received successfully!" ) ;
1692- std:: process:: exit( 0 ) ;
1678+ println!( "✅ All files received successfully!" ) ;
16931679 }
16941680 }
1681+
1682+ Ok ( ( ) )
16951683}
16961684
16971685/// Run send-files-to operation (sender connects to waiting receiver).
0 commit comments