From 3339fb7de0d78615646e537408df1834c64a3132 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Mon, 9 Aug 2010 20:44:01 +0200 Subject: [PATCH] Fix 'play/playid "-1"' behaviour when playlist is empty --- docs/changes.rst | 1 + mopidy/mpd/frontend.py | 4 ++++ tests/mpd/playback_test.py | 14 ++++++++++++++ 3 files changed, 19 insertions(+) diff --git a/docs/changes.rst b/docs/changes.rst index 724d75bb..5fa08444 100644 --- a/docs/changes.rst +++ b/docs/changes.rst @@ -18,6 +18,7 @@ Another great release. - MPD frontend: - Search improvements, including support for multi-word search. + - Fixed ``play "-1"`` and ``playid "-1"`` behaviour when playlist is empty. - Backend API: diff --git a/mopidy/mpd/frontend.py b/mopidy/mpd/frontend.py index 041603ba..d4ed6a73 100644 --- a/mopidy/mpd/frontend.py +++ b/mopidy/mpd/frontend.py @@ -964,6 +964,8 @@ class MpdFrontend(object): cpid = int(cpid) try: if cpid == -1: + if not self.backend.current_playlist.cp_tracks: + return # Fail silently cp_track = self.backend.current_playlist.cp_tracks[0] else: cp_track = self.backend.current_playlist.get(cpid=cpid) @@ -989,6 +991,8 @@ class MpdFrontend(object): songpos = int(songpos) try: if songpos == -1: + if not self.backend.current_playlist.cp_tracks: + return # Fail silently cp_track = self.backend.current_playlist.cp_tracks[0] else: cp_track = self.backend.current_playlist.cp_tracks[songpos] diff --git a/tests/mpd/playback_test.py b/tests/mpd/playback_test.py index b3806090..ed7cdf33 100644 --- a/tests/mpd/playback_test.py +++ b/tests/mpd/playback_test.py @@ -180,6 +180,13 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) self.assertEqual(self.b.playback.current_track, track) + def test_play_minus_one_on_empty_playlist_does_not_ack(self): + self.b.current_playlist.clear() + result = self.h.handle_request(u'play "-1"') + self.assert_(u'OK' in result) + self.assertEqual(self.b.playback.STOPPED, self.b.playback.state) + self.assertEqual(self.b.playback.current_track, None) + def test_playid(self): self.b.current_playlist.load([Track()]) result = self.h.handle_request(u'playid "1"') @@ -194,6 +201,13 @@ class PlaybackControlHandlerTest(unittest.TestCase): self.assertEqual(self.b.playback.PLAYING, self.b.playback.state) self.assertEqual(self.b.playback.current_track, track) + def test_playid_minus_one_on_empty_playlist_does_not_ack(self): + self.b.current_playlist.clear() + result = self.h.handle_request(u'playid "-1"') + self.assert_(u'OK' in result) + self.assertEqual(self.b.playback.STOPPED, self.b.playback.state) + self.assertEqual(self.b.playback.current_track, None) + def test_playid_which_does_not_exist(self): self.b.current_playlist.load([Track()]) result = self.h.handle_request(u'playid "12345"')