diff --git a/mopidy/mpd/protocol/current_playlist.py b/mopidy/mpd/protocol/current_playlist.py index 662cac8b..39ba9486 100644 --- a/mopidy/mpd/protocol/current_playlist.py +++ b/mopidy/mpd/protocol/current_playlist.py @@ -219,11 +219,8 @@ def playlistid(context, tlid=None): context.core.tracklist.tl_tracks.get()) -# TODO: convert -@protocol.handle_request(r'playlistinfo$') -@protocol.handle_request(r'playlistinfo\ "(?P-?\d+)"$') -@protocol.handle_request(r'playlistinfo\ "(?P\d+):(?P\d+)*"$') -def playlistinfo(context, songpos=None, start=None, end=None): +@protocol.commands.add('playlistinfo') +def playlistinfo(context, parameter=None): """ *musicpd.org, current playlist section:* @@ -238,24 +235,18 @@ def playlistinfo(context, songpos=None, start=None, end=None): - uses negative indexes, like ``playlistinfo "-1"``, to request the entire playlist """ - if songpos == '-1': - songpos = None - if songpos is not None: - songpos = int(songpos) - tl_track = context.core.tracklist.tl_tracks.get()[songpos] - return translator.track_to_mpd_format(tl_track, position=songpos) + if parameter is None or parameter == '-1': + start, end = 0, None else: - if start is None: - start = 0 - start = int(start) - if not (0 <= start <= context.core.tracklist.length.get()): - raise exceptions.MpdArgError('Bad song index') - if end is not None: - end = int(end) - if end > context.core.tracklist.length.get(): - end = None - tl_tracks = context.core.tracklist.tl_tracks.get() - return translator.tracks_to_mpd_format(tl_tracks, start, end) + tracklist_slice = protocol.RANGE(parameter) + start, end = tracklist_slice.start, tracklist_slice.stop + + tl_tracks = context.core.tracklist.tl_tracks.get() + if start and start > len(tl_tracks): + raise exceptions.MpdArgError('Bad song index') + if end and end > len(tl_tracks): + end = None + return translator.tracks_to_mpd_format(tl_tracks, start, end) @protocol.commands.add('playlistsearch') diff --git a/tests/mpd/protocol/test_current_playlist.py b/tests/mpd/protocol/test_current_playlist.py index e2db8b05..e9898dd9 100644 --- a/tests/mpd/protocol/test_current_playlist.py +++ b/tests/mpd/protocol/test_current_playlist.py @@ -389,6 +389,10 @@ class CurrentPlaylistHandlerTest(protocol.BaseTestCase): self.sendRequest('playlistinfo "0:20"') self.assertInResponse('OK') + def test_playlistinfo_with_zero_returns_ok(self): + self.sendRequest('playlistinfo "0"') + self.assertInResponse('OK') + def test_playlistsearch(self): self.sendRequest('playlistsearch "any" "needle"') self.assertEqualResponse('ACK [0@0] {playlistsearch} Not implemented')