diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py index 80a64c17..d1107020 100644 --- a/mopidy/frontends/mpris.py +++ b/mopidy/frontends/mpris.py @@ -264,10 +264,11 @@ class MprisObject(dbus.service.Object): @dbus.service.method(dbus_interface=PLAYER_IFACE) def Play(self): logger.debug(u'%s.Play called', PLAYER_IFACE) - # TODO Pseudo code: - # if playback.state == playback.PAUSED: playback.resume() - # elif playback.state == playback.STOPPED: playback.play() - pass + state = self.backend.playback.state.get() + if state == PlaybackController.PAUSED: + self.backend.playback.resume().get() + else: + self.backend.playback.play().get() @dbus.service.method(dbus_interface=PLAYER_IFACE) def Seek(self, offset): diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index db39d015..d8514abd 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -204,6 +204,12 @@ class PlayerInterfaceTest(unittest.TestCase): self.mpris.Stop() self.assertEquals(self.backend.playback.state.get(), STOPPED) + def test_play_when_stopped_starts_playback(self): + self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')]) + self.assertEquals(self.backend.playback.state.get(), STOPPED) + self.mpris.Play() + self.assertEquals(self.backend.playback.state.get(), PLAYING) + def test_play_after_pause_resumes_from_same_position(self): self.backend.current_playlist.append([Track(uri='a', length=40000)]) self.backend.playback.play() @@ -212,9 +218,17 @@ class PlayerInterfaceTest(unittest.TestCase): self.assert_(before_pause >= 0) self.mpris.Pause() + self.assertEquals(self.backend.playback.state.get(), PAUSED) at_pause = self.backend.playback.time_position.get() self.assert_(at_pause >= before_pause) self.mpris.Play() + self.assertEquals(self.backend.playback.state.get(), PLAYING) after_pause = self.backend.playback.time_position.get() self.assert_(after_pause >= at_pause) + + def test_play_when_there_is_no_track_has_no_effect(self): + self.backend.current_playlist.clear() + self.assertEquals(self.backend.playback.state.get(), STOPPED) + self.mpris.Play() + self.assertEquals(self.backend.playback.state.get(), STOPPED)