@@ -365,14 +365,57 @@ impl ExportableAppsDialog {
365365 reaction ! ( task. status( ) , move |status: crate :: models:: TaskStatus | {
366366 if status == crate :: models:: TaskStatus :: Failed {
367367 let error_ref = task. error( ) ;
368- let error_msg = if let Some ( err) = error_ref. as_ref( ) {
369- format!( "Failed to export '{}': {}" , binary_name_clone, err)
368+ let heading = format!( "{} '{}'" , gettext( "Failed to export" ) , binary_name_clone) ;
369+
370+ let ( error_body, extra_child) = if let Some ( err) = error_ref. as_ref( ) {
371+ if let Some ( crate :: backends:: distrobox:: Error :: CommandFailed {
372+ stderr, ..
373+ } ) = err. downcast_ref:: <crate :: backends:: distrobox:: Error >( )
374+ {
375+ let label = gtk:: Label :: builder( )
376+ . label( stderr. trim( ) )
377+ . wrap( true )
378+ . margin_start( 12 )
379+ . margin_end( 12 )
380+ . margin_top( 12 )
381+ . margin_bottom( 12 )
382+ . selectable( true )
383+ . build( ) ;
384+ label. add_css_class( "monospace" ) ;
385+
386+ let scroll = gtk:: ScrolledWindow :: builder( )
387+ . child( & label)
388+ . min_content_height( 120 )
389+ . max_content_height( 350 )
390+ . propagate_natural_height( true )
391+ . min_content_width( 300 )
392+ . build( ) ;
393+ scroll. add_css_class( "card" ) ;
394+
395+ (
396+ gettext( "DistroShelf failed to export the binary because:" ) ,
397+ Some ( scroll. upcast:: <gtk:: Widget >( ) ) ,
398+ )
399+ } else {
400+ ( format!( "{}" , err) , None )
401+ }
370402 } else {
371- format! ( "Failed to export '{}'" , binary_name_clone )
403+ ( gettext ( "Unknown error occurred" ) , None )
372404 } ;
373- let toast = adw:: Toast :: new( & error_msg) ;
374- toast. set_timeout( 5 ) ;
375- this. imp( ) . toast_overlay. add_toast( toast) ;
405+
406+ let dialog = adw:: AlertDialog :: builder( )
407+ . heading( & heading)
408+ . body( & error_body)
409+ . close_response( "close" )
410+ . default_response( "close" )
411+ . build( ) ;
412+
413+ if let Some ( child) = extra_child {
414+ dialog. set_extra_child( Some ( & child) ) ;
415+ }
416+
417+ dialog. add_response( "close" , & gettext( "Close" ) ) ;
418+ dialog. present( Some ( & this) ) ;
376419 }
377420 } ) ;
378421 }
0 commit comments