@@ -621,11 +621,17 @@ impl MprisPlayerService {
621621    // Calling Play after this should cause playback to start again from the same position. 
622622    // 
623623    // If `self.can_pause` is `false`, attempting to call this method should have no effect. 
624-     async  fn  pause ( & self )  { 
624+     async  fn  pause ( & self )  -> zbus :: fdo :: Result < ( ) >   { 
625625        debug ! ( "org.mpris.MediaPlayer2.Player::Pause" ) ; 
626626        // FIXME: This should return an error if can_pause is false 
627-         if  let  Some ( spirc)  = & self . spirc  { 
628-             let  _ = spirc. pause ( ) ; 
627+         match  ( & self . spirc ,  & self . metadata . mpris . track_id )  { 
628+             ( Some ( spirc) ,  Some ( _) )  => spirc
629+                 . pause ( ) 
630+                 . map_err ( |err| zbus:: fdo:: Error :: Failed ( format ! ( "{err}" ) ) ) , 
631+             ( Some ( _) ,  None )  => { 
632+                 zbus:: fdo:: Result :: Err ( zbus:: fdo:: Error :: Failed ( String :: from ( "No track" ) ) ) 
633+             } 
634+             _ => zbus:: fdo:: Result :: Err ( zbus:: fdo:: Error :: Failed ( String :: from ( "Can't play/pause" ) ) ) , 
629635        } 
630636    } 
631637
@@ -637,11 +643,16 @@ impl MprisPlayerService {
637643    // 
638644    // If `self.can_pause` is `false`, attempting to call this method should have no effect and 
639645    // raise an error. 
640-     async  fn  play_pause ( & self )  { 
646+     async  fn  play_pause ( & self )  -> zbus :: fdo :: Result < ( ) >   { 
641647        debug ! ( "org.mpris.MediaPlayer2.Player::PlayPause" ) ; 
642-         // FIXME: This should return an error if can_pause is false 
643-         if  let  Some ( spirc)  = & self . spirc  { 
644-             let  _ = spirc. play_pause ( ) ; 
648+         match  ( & self . spirc ,  & self . metadata . mpris . track_id )  { 
649+             ( Some ( spirc) ,  Some ( _) )  => spirc
650+                 . play_pause ( ) 
651+                 . map_err ( |err| zbus:: fdo:: Error :: Failed ( format ! ( "{err}" ) ) ) , 
652+             ( Some ( _) ,  None )  => { 
653+                 zbus:: fdo:: Result :: Err ( zbus:: fdo:: Error :: Failed ( String :: from ( "No track" ) ) ) 
654+             } 
655+             _ => zbus:: fdo:: Result :: Err ( zbus:: fdo:: Error :: Failed ( String :: from ( "Can't play/pause" ) ) ) , 
645656        } 
646657    } 
647658
@@ -656,7 +667,6 @@ impl MprisPlayerService {
656667    // an error. 
657668    async  fn  stop ( & self )  { 
658669        debug ! ( "org.mpris.MediaPlayer2.Player::Stop" ) ; 
659-         // FIXME: This should return an error if can_control is false 
660670        if  let  Some ( spirc)  = & self . spirc  { 
661671            let  _ = spirc. pause ( ) ; 
662672            let  _ = spirc. set_position_ms ( 0 ) ; 
@@ -672,12 +682,25 @@ impl MprisPlayerService {
672682    // If there is no track to play, this has no effect. 
673683    // 
674684    // If `self.can_play` is `false`, attempting to call this method should have no effect. 
675-     async  fn  play ( & self )  { 
685+     async  fn  play ( & self )  -> zbus :: fdo :: Result < ( ) >   { 
676686        debug ! ( "org.mpris.MediaPlayer2.Player::Play" ) ; 
677687        if  let  Some ( spirc)  = & self . spirc  { 
678688            let  _ = spirc. activate ( ) ; 
679689            let  _ = spirc. play ( ) ; 
680690        } 
691+         match  ( & self . spirc ,  & self . metadata . mpris . track_id )  { 
692+             ( Some ( spirc) ,  Some ( _) )  => { 
693+                 let  result:  Result < ( ) ,  Error >  = ( || { 
694+                     spirc. activate ( ) ?; 
695+                     spirc. play ( ) 
696+                 } ) ( ) ; 
697+                 result. map_err ( |err| zbus:: fdo:: Error :: Failed ( format ! ( "{err}" ) ) ) 
698+             } 
699+             ( Some ( _) ,  None )  => { 
700+                 zbus:: fdo:: Result :: Err ( zbus:: fdo:: Error :: Failed ( String :: from ( "No track" ) ) ) 
701+             } 
702+             _ => zbus:: fdo:: Result :: Err ( zbus:: fdo:: Error :: Failed ( String :: from ( "Can't play/pause" ) ) ) , 
703+         } 
681704    } 
682705
683706    // Seeks forward in the current track by the specified number of microseconds. 
0 commit comments