From 3dedb8ced3311df789378ef48b73c5e706fe4c21 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 28 Feb 2010 16:46:39 +0100 Subject: [PATCH] Implement _current_playlist_delete --- mopidy/mpd/handler.py | 19 ++++++++++++++++++- tests/mpd/handlertest.py | 32 ++++++++++++++++++++++++++------ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/mopidy/mpd/handler.py b/mopidy/mpd/handler.py index d3656f42..dbf22de1 100644 --- a/mopidy/mpd/handler.py +++ b/mopidy/mpd/handler.py @@ -253,7 +253,24 @@ class MpdHandler(object): Deletes a song from the playlist. """ - raise MpdNotImplemented # TODO + try: + tracks = [] + if songpos is not None: + songpos = int(songpos) + tracks = [ + self.backend.current_playlist.playlist.tracks[songpos]] + elif start is not None: + start = int(start) + if end is not None: + end = int(end) + else: + end = self.backend.current_playlist.playlist.length + tracks = self.backend.current_playlist.playlist.tracks[ + start:end] + for track in tracks: + self.backend.current_playlist.remove(track) + except IndexError, e: + raise MpdAckError(u'Position out of bounds') @handle_pattern(r'^deleteid "(?P\d+)"$') def _current_playlist_deleteid(self, songid): diff --git a/tests/mpd/handlertest.py b/tests/mpd/handlertest.py index 1830151d..0d7c2946 100644 --- a/tests/mpd/handlertest.py +++ b/tests/mpd/handlertest.py @@ -510,16 +510,36 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.assert_(u'ACK Not implemented' in result) def test_delete_songpos(self): - result = self.h.handle_request(u'delete "5"') - self.assert_(u'ACK Not implemented' in result) + self.b.current_playlist.playlist = Playlist( + tracks=[Track(), Track(), Track(), Track(), Track()]) + self.assertEquals(self.b.current_playlist.playlist.length, 5) + result = self.h.handle_request(u'delete "2"') + self.assertEquals(self.b.current_playlist.playlist.length, 4) + self.assert_(u'OK' in result) def test_delete_open_range(self): - result = self.h.handle_request(u'delete "10:"') - self.assert_(u'ACK Not implemented' in result) + self.b.current_playlist.playlist = Playlist( + tracks=[Track(), Track(), Track(), Track(), Track()]) + self.assertEquals(self.b.current_playlist.playlist.length, 5) + result = self.h.handle_request(u'delete "1:"') + self.assertEquals(self.b.current_playlist.playlist.length, 1) + self.assert_(u'OK' in result) def test_delete_closed_range(self): - result = self.h.handle_request(u'delete "10:20"') - self.assert_(u'ACK Not implemented' in result) + self.b.current_playlist.playlist = Playlist( + tracks=[Track(), Track(), Track(), Track(), Track()]) + self.assertEquals(self.b.current_playlist.playlist.length, 5) + result = self.h.handle_request(u'delete "1:3"') + self.assertEquals(self.b.current_playlist.playlist.length, 3) + self.assert_(u'OK' in result) + + def test_delete_out_of_range(self): + self.b.current_playlist.playlist = Playlist( + tracks=[Track(), Track(), Track(), Track(), Track()]) + self.assertEquals(self.b.current_playlist.playlist.length, 5) + result = self.h.handle_request(u'delete "5"') + self.assertEquals(self.b.current_playlist.playlist.length, 5) + self.assert_(u'ACK Position out of bounds' in result) def test_deleteid(self): self.b.current_playlist.load(Playlist(tracks=[Track(id=0)]))