diff --git a/docs/changes.rst b/docs/changes.rst index 6f806425..70d9390f 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -24,6 +24,7 @@ Another great release. - Search improvements, including support for multi-word search. - Fixed ``play "-1"`` and ``playid "-1"`` behaviour when playlist is empty. - Support ``plchanges "-1"`` to work better with MPDroid. + - Support ``pause`` without arguments to work better with MPDroid. - Backend API: diff --git a/mopidy/frontends/mpd/protocol/playback.py b/mopidy/frontends/mpd/protocol/playback.py index 719bd8b5..53cc2bbc 100644 --- a/mopidy/frontends/mpd/protocol/playback.py +++ b/mopidy/frontends/mpd/protocol/playback.py @@ -86,16 +86,28 @@ def next_(frontend): """ return frontend.backend.playback.next() +@handle_pattern(r'^pause$') @handle_pattern(r'^pause "(?P[01])"$') -def pause(frontend, state): +def pause(frontend, state=None): """ *musicpd.org, playback section:* ``pause {PAUSE}`` Toggles pause/resumes playing, ``PAUSE`` is 0 or 1. + + *MPDroid:* + + - Calls ``pause`` without any arguments to toogle pause. """ - if int(state): + if state is None: + if (frontend.backend.playback.state == + frontend.backend.playback.PLAYING): + frontend.backend.playback.pause() + elif (frontend.backend.playback.state == + frontend.backend.playback.PAUSED): + frontend.backend.playback.resume() + elif int(state): frontend.backend.playback.pause() else: frontend.backend.playback.resume() diff --git a/tests/frontends/mpd/playback_test.py b/tests/frontends/mpd/playback_test.py index aee05d6c..e76cb9df 100644 --- a/tests/frontends/mpd/playback_test.py +++ b/tests/frontends/mpd/playback_test.py @@ -136,8 +136,7 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assert_(u'OK' in result) def test_pause_off(self): - track = Track() - self.b.current_playlist.load([track]) + self.b.current_playlist.load([Track()]) self.h.handle_request(u'play "0"') self.h.handle_request(u'pause "1"') result = self.h.handle_request(u'pause "0"') @@ -145,16 +144,26 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) def test_pause_on(self): - track = Track() - self.b.current_playlist.load([track]) + self.b.current_playlist.load([Track()]) self.h.handle_request(u'play "0"') result = self.h.handle_request(u'pause "1"') self.assert_(u'OK' in result) self.assertEqual(self.b.playback.PAUSED, self.b.playback.state) + def test_pause_toggle(self): + self.b.current_playlist.load([Track()]) + result = self.h.handle_request(u'play "0"') + self.assert_(u'OK' in result) + self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) + result = self.h.handle_request(u'pause') + self.assert_(u'OK' in result) + self.assertEqual(self.b.playback.PAUSED, self.b.playback.state) + result = self.h.handle_request(u'pause') + self.assert_(u'OK' in result) + self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) + def test_play_without_pos(self): - track = Track() - self.b.current_playlist.load([track]) + self.b.current_playlist.load([Track()]) self.b.playback.state = self.b.playback.PAUSED result = self.h.handle_request(u'play') self.assert_(u'OK' in result)