@@ -58,9 +58,8 @@ impl Player {
5858
5959 // Initialize audio system with Rodio 0.21 API
6060 let ( stream_handle, sink) = match OutputStreamBuilder :: open_default_stream ( ) {
61- Ok ( stream_handle) => {
61+ Ok ( stream_handle) => {
6262 let sink = Sink :: connect_new ( stream_handle. mixer ( ) ) ;
63- eprintln ! ( "Audio system initialized successfully." ) ;
6463 ( Some ( Box :: new ( stream_handle) as Box < dyn std:: any:: Any > ) , Some ( Arc :: new ( Mutex :: new ( sink) ) ) )
6564 }
6665 Err ( e) => {
@@ -326,8 +325,7 @@ fn load_mp3_files() -> Result<Vec<Song>, Box<dyn std::error::Error>> {
326325 if data_dir. exists ( ) {
327326 match visit_dir ( & data_dir, & mut songs) {
328327 Ok ( _) => {
329- eprintln ! ( "Loaded {} MP3 files from: {data_dir:?}" , songs. len( ) ) ;
330- // break;
328+ //eprintln!("Loaded {} MP3 files from: {data_dir:?}", songs.len()); // break;
331329 }
332330 Err ( e) => {
333331 eprintln ! ( "Warning: Could not access directory {data_dir:?}: {e}" ) ;
@@ -448,20 +446,18 @@ fn ui(f: &mut Frame, player: &Player) {
448446 // Status
449447 let mode_text = if player. random_mode { "RANDOM" } else { "NORMAL" } ;
450448
451- let status = Paragraph :: new ( vec ! [
452- Line :: from( vec![
453- Span :: raw( format!( " Mode: {} | Songs: {} | " , mode_text, player. songs. len( ) ) ) ,
454- Span :: styled( "X" , Style :: default ( ) . fg( PRIMARY_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
455- Span :: raw( ": Help " ) ,
456- ] )
457- ] )
458- . alignment ( Alignment :: Left )
459- . block (
460- Block :: default ( )
461- . borders ( Borders :: ALL )
462- . title ( "Status" )
463- . border_style ( Style :: default ( ) . fg ( PRIMARY_COLOR ) ) ,
464- ) ;
449+ let status = Paragraph :: new ( vec ! [ Line :: from( vec![
450+ Span :: raw( format!( " Mode: {} | Songs: {} | " , mode_text, player. songs. len( ) ) ) ,
451+ Span :: styled( "X" , Style :: default ( ) . fg( PRIMARY_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
452+ Span :: raw( ": Help " ) ,
453+ ] ) ] )
454+ . alignment ( Alignment :: Left )
455+ . block (
456+ Block :: default ( )
457+ . borders ( Borders :: ALL )
458+ . title ( "Status" )
459+ . border_style ( Style :: default ( ) . fg ( PRIMARY_COLOR ) ) ,
460+ ) ;
465461 f. render_widget ( status, chunks[ 3 ] ) ;
466462
467463 // Controls popup
@@ -494,7 +490,7 @@ fn ui(f: &mut Frame, player: &Player) {
494490 Span :: raw( " - Toggle random mode" ) ,
495491 ] ) ,
496492 Line :: from( vec![
497- Span :: styled( " X " , Style :: default ( ) . fg( PRIMARY_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
493+ Span :: styled( " X " , Style :: default ( ) . fg( PRIMARY_COLOR ) . add_modifier( Modifier :: BOLD ) ) ,
498494 Span :: raw( " - Close this popup" ) ,
499495 ] ) ,
500496 Line :: from( vec![
@@ -582,6 +578,12 @@ fn run_player() -> Result<(), Box<dyn std::error::Error>> {
582578
583579 let result = main_loop ( & mut terminal, & mut player) ;
584580
581+ // Clean shutdown of audio to prevent warning messages
582+ if let Some ( ref sink) = player. sink {
583+ let sink = sink. lock ( ) . unwrap ( ) ;
584+ sink. stop ( ) ;
585+ }
586+
585587 disable_raw_mode ( ) ?;
586588 execute ! ( terminal. backend_mut( ) , LeaveAlternateScreen ) ?;
587589 terminal. show_cursor ( ) ?;
0 commit comments