From 8fe261322f0f534ca8ac0d1ec59ecdf376e91abc Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 4 Oct 2010 22:17:03 +0200 Subject: [PATCH 1/4] Add test to check that "playid -1" resume playback The problem is, the test shouldn't pass, but it does. --- tests/frontends/mpd/playback_test.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/frontends/mpd/playback_test.py b/tests/frontends/mpd/playback_test.py index 3ba48a54..64cdf5a6 100644 --- a/tests/frontends/mpd/playback_test.py +++ b/tests/frontends/mpd/playback_test.py @@ -285,6 +285,17 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assertEqual(self.b.playback.STOPPED, self.b.playback.state) self.assertEqual(self.b.playback.current_track, None) + def test_playid_minus_one_resumes_if_paused(self): + self.b.current_playlist.append([Track(length=40000)]) + self.b.playback.seek(30000) + self.b.playback.pause() + result = self.h.handle_request(u'playid "-1"') + self.assert_(u'OK' in result) + self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) + self.assert_(self.b.playback.time_position >= 30000) + self.fail(u'This test should fail, but it does not. ' + 'The functionality is not implemented.') + def test_playid_which_does_not_exist(self): self.b.current_playlist.append([Track()]) result = self.h.handle_request(u'playid "12345"') From d6fce1cf724bb318b08840459d23ed149260cb50 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 24 Oct 2010 20:34:37 +0200 Subject: [PATCH 2/4] Simplify play() logic --- mopidy/backends/base/playback.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/base/playback.py b/mopidy/backends/base/playback.py index 779903a7..66521d60 100644 --- a/mopidy/backends/base/playback.py +++ b/mopidy/backends/base/playback.py @@ -375,12 +375,14 @@ class BasePlaybackController(object): if cp_track is not None: assert cp_track in self.backend.current_playlist.cp_tracks - elif not self.current_cp_track: + + if cp_track is None and self.current_cp_track is None: cp_track = self.cp_track_at_next - if self.state == self.PAUSED and cp_track is None: + if cp_track is None and self.state == self.PAUSED: self.resume() - elif cp_track is not None: + + if cp_track is not None: self.current_cp_track = cp_track self.state = self.PLAYING if not self._play(cp_track[1]): From c9535ffe1070e1c19bb430f2acad6d8f83939b96 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 24 Oct 2010 20:40:47 +0200 Subject: [PATCH 3/4] Setting the state to STOPPED right before starting a track makes the test fail as it should --- mopidy/backends/base/playback.py | 1 + tests/frontends/mpd/playback_test.py | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/mopidy/backends/base/playback.py b/mopidy/backends/base/playback.py index 66521d60..c4ef5fbf 100644 --- a/mopidy/backends/base/playback.py +++ b/mopidy/backends/base/playback.py @@ -383,6 +383,7 @@ class BasePlaybackController(object): self.resume() if cp_track is not None: + self.state = self.STOPPED self.current_cp_track = cp_track self.state = self.PLAYING if not self._play(cp_track[1]): diff --git a/tests/frontends/mpd/playback_test.py b/tests/frontends/mpd/playback_test.py index b6e0751e..4e60546d 100644 --- a/tests/frontends/mpd/playback_test.py +++ b/tests/frontends/mpd/playback_test.py @@ -288,13 +288,14 @@ class PlaybackControlHandlerTest(unittest.TestCase): def test_playid_minus_one_resumes_if_paused(self): self.b.current_playlist.append([Track(length=40000)]) self.b.playback.seek(30000) + self.assert_(self.b.playback.time_position >= 30000) + self.assertEquals(self.b.playback.PLAYING, self.b.playback.state) self.b.playback.pause() + self.assertEquals(self.b.playback.PAUSED, self.b.playback.state) result = self.h.handle_request(u'playid "-1"') self.assert_(u'OK' in result) self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) self.assert_(self.b.playback.time_position >= 30000) - self.fail(u'This test should fail, but it does not. ' - 'The functionality is not implemented.') def test_playid_which_does_not_exist(self): self.b.current_playlist.append([Track()]) From ff616f3a0ad1b42db599052ed37d613f4c3b6959 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 24 Oct 2010 20:49:57 +0200 Subject: [PATCH 4/4] 'playid "-1"' now resumes playback if paused --- docs/changes.rst | 1 + mopidy/frontends/mpd/protocol/playback.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/docs/changes.rst b/docs/changes.rst index ed05050c..2ff8c982 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -43,6 +43,7 @@ No description yet. :issue:`24`, contributes to :issue:`14`) - Improved handling of uncaught exceptions in threads. The entire process should now exit immediately. +- MPD command ``playid "-1"`` now correctly resumes playback if paused. 0.1.0 (2010-08-23) diff --git a/mopidy/frontends/mpd/protocol/playback.py b/mopidy/frontends/mpd/protocol/playback.py index c3fbdd5f..2f5dd29e 100644 --- a/mopidy/frontends/mpd/protocol/playback.py +++ b/mopidy/frontends/mpd/protocol/playback.py @@ -138,6 +138,10 @@ def playid(frontend, cpid): at the first track. """ cpid = int(cpid) + paused = (frontend.backend.playback.state == + frontend.backend.playback.PAUSED) + if cpid == -1 and paused: + return frontend.backend.playback.resume() try: if cpid == -1: cp_track = _get_cp_track_for_play_minus_one(frontend)