diff --git a/mopidy/mpd/handler.py b/mopidy/mpd/handler.py index 275ca8e1..0c282b65 100644 --- a/mopidy/mpd/handler.py +++ b/mopidy/mpd/handler.py @@ -224,11 +224,9 @@ class MpdHandler(object): Adds the file ``URI`` to the playlist (directories add recursively). ``URI`` can also be a single file. """ - track = self.backend.library.lookup(uri) - if track is not None: - self.backend.current_playlist.add(track) + self._current_playlist_addid(uri) - @handle_pattern(r'^addid "(?P[^"]*)"( (?P\d+))*$') + @handle_pattern(r'^addid "(?P[^"]*)"( "(?P\d+)")*$') def _current_playlist_addid(self, uri, songpos=None): """ *musicpd.org, current playlist section:* @@ -243,7 +241,12 @@ class MpdHandler(object): Id: 999 OK """ - raise MpdNotImplemented # TODO + if songpos is not None: + songpos = int(songpos) + track = self.backend.library.lookup(uri) + if track is not None: + self.backend.current_playlist.add(track, at_position=songpos) + return ('Id', track.id) @handle_pattern(r'^delete "(?P\d+)"$') @handle_pattern(r'^delete "(?P\d+):(?P\d+)*"$') diff --git a/tests/mpd/handlertest.py b/tests/mpd/handlertest.py index 62fd4d44..170b90f1 100644 --- a/tests/mpd/handlertest.py +++ b/tests/mpd/handlertest.py @@ -496,19 +496,37 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): def test_add(self): needle = Track(uri='dummy://foo') self.b.library._library = [Track(), Track(), needle, Track()] - self.assertEquals(self.b.current_playlist.playlist.length, 0) + 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'add "dummy://foo"') - self.assertEquals(self.b.current_playlist.playlist.length, 1) - self.assert_(needle in self.b.current_playlist.playlist.tracks) + self.assertEquals(self.b.current_playlist.playlist.length, 6) + self.assertEquals(self.b.current_playlist.playlist.tracks[5], needle) self.assert_(u'OK' in result) def test_addid_without_songpos(self): - result = self.h.handle_request(u'addid "file:///dev/urandom"') - self.assert_(u'ACK Not implemented' in result) + needle = Track(uri='dummy://foo', id=137) + self.b.library._library = [Track(), Track(), needle, Track()] + 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'addid "dummy://foo"') + self.assertEquals(self.b.current_playlist.playlist.length, 6) + self.assertEquals(self.b.current_playlist.playlist.tracks[5], needle) + self.assert_(u'Id: 137' in result) + self.assert_(u'OK' in result) def test_addid_with_songpos(self): - result = self.h.handle_request(u'addid "file:///dev/urandom" 0') - self.assert_(u'ACK Not implemented' in result) + needle = Track(uri='dummy://foo', id=137) + self.b.library._library = [Track(), Track(), needle, Track()] + 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'addid "dummy://foo" "3"') + self.assertEquals(self.b.current_playlist.playlist.length, 6) + self.assertEquals(self.b.current_playlist.playlist.tracks[3], needle) + self.assert_(u'Id: 137' in result) + self.assert_(u'OK' in result) def test_clear(self): result = self.h.handle_request(u'clear')