From 818e602221d024da641998029116d3be409d6f0f Mon Sep 17 00:00:00 2001 From: Johannes Knutsen Date: Tue, 30 Mar 2010 01:59:34 +0200 Subject: [PATCH] handle gmpc issuing playid "-1" after playlst replacement --- mopidy/mpd/frontend.py | 10 +++++++++- tests/mpd/frontend_test.py | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/mopidy/mpd/frontend.py b/mopidy/mpd/frontend.py index 7a92a6c8..c3ce90a1 100644 --- a/mopidy/mpd/frontend.py +++ b/mopidy/mpd/frontend.py @@ -814,6 +814,7 @@ class MpdFrontend(object): return self.backend.playback.play() @handle_pattern(r'^playid "(?P\d+)"$') + @handle_pattern(r'^playid "(?P-1)"$') def _playback_playid(self, songid): """ *musicpd.org, playback section:* @@ -821,10 +822,17 @@ class MpdFrontend(object): ``playid [SONGID]`` Begins playing the playlist at song ``SONGID``. + + *GMPC:* + + - issues ``playid "-1"`` after playlist replacement. """ songid = int(songid) try: - track = self.backend.current_playlist.get_by_id(songid) + if songid == -1: + track = self.backend.current_playlist.playlist.tracks[0] + else: + track = self.backend.current_playlist.get_by_id(songid) return self.backend.playback.play(track) except KeyError as e: raise MpdAckError(e[0]) diff --git a/tests/mpd/frontend_test.py b/tests/mpd/frontend_test.py index 6705ed6f..58294935 100644 --- a/tests/mpd/frontend_test.py +++ b/tests/mpd/frontend_test.py @@ -465,6 +465,14 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assert_(u'OK' in result) self.assertEquals(self.b.playback.PLAYING, self.b.playback.state) + def test_playid_minus_one_plays_first_in_playlist(self): + track = Track(id=0) + self.b.current_playlist.load(Playlist(tracks=[track])) + result = self.h.handle_request(u'playid "-1"') + self.assert_(u'OK' in result) + self.assertEquals(self.b.playback.PLAYING, self.b.playback.state) + self.assertEquals(self.b.playback.current_track, track) + def test_playid_which_does_not_exist(self): self.b.current_playlist.load(Playlist(tracks=[Track(id=0)])) result = self.h.handle_request(u'playid "1"')