From 71fc316709560e94efa836dc4b23fa37cf49fb21 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Sun, 28 Feb 2010 16:57:16 +0100 Subject: [PATCH] Implement _current_playlist_add --- mopidy/backends/__init__.py | 7 ++++++- mopidy/backends/dummy.py | 7 +++++++ mopidy/mpd/handler.py | 4 +++- tests/mpd/handlertest.py | 9 +++++++-- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/mopidy/backends/__init__.py b/mopidy/backends/__init__.py index 97042468..9a591894 100644 --- a/mopidy/backends/__init__.py +++ b/mopidy/backends/__init__.py @@ -63,7 +63,12 @@ class BaseCurrentPlaylistController(object): :param at_position: position in current playlist to add track :type at_position: int or :class:`None` """ - raise NotImplementedError + tracks = self.playlist.tracks + if at_position: + tracks.insert(at_position, track) + else: + tracks.append(track) + self.playlist = self.playlist.with_(tracks=tracks) def clear(self): """Clear the current playlist.""" diff --git a/mopidy/backends/dummy.py b/mopidy/backends/dummy.py index 4f7c1c9c..c2e828f9 100644 --- a/mopidy/backends/dummy.py +++ b/mopidy/backends/dummy.py @@ -15,6 +15,13 @@ class DummyCurrentPlaylistController(BaseCurrentPlaylistController): pass class DummyLibraryController(BaseLibraryController): + _library = [] + + def lookup(self, uri): + matches = filter(lambda t: uri == t.uri, self._library) + if matches: + return matches[0] + def search(self, type, query): return Playlist() diff --git a/mopidy/mpd/handler.py b/mopidy/mpd/handler.py index dbf22de1..275ca8e1 100644 --- a/mopidy/mpd/handler.py +++ b/mopidy/mpd/handler.py @@ -224,7 +224,9 @@ class MpdHandler(object): Adds the file ``URI`` to the playlist (directories add recursively). ``URI`` can also be a single file. """ - raise MpdNotImplemented # TODO + track = self.backend.library.lookup(uri) + if track is not None: + self.backend.current_playlist.add(track) @handle_pattern(r'^addid "(?P[^"]*)"( (?P\d+))*$') def _current_playlist_addid(self, uri, songpos=None): diff --git a/tests/mpd/handlertest.py b/tests/mpd/handlertest.py index 0d7c2946..62fd4d44 100644 --- a/tests/mpd/handlertest.py +++ b/tests/mpd/handlertest.py @@ -494,8 +494,13 @@ class CurrentPlaylistHandlerTest(unittest.TestCase): self.h = handler.MpdHandler(backend=self.b) def test_add(self): - result = self.h.handle_request(u'add "file:///dev/urandom"') - self.assert_(u'ACK Not implemented' in result) + needle = Track(uri='dummy://foo') + self.b.library._library = [Track(), Track(), needle, Track()] + self.assertEquals(self.b.current_playlist.playlist.length, 0) + 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.assert_(u'OK' in result) def test_addid_without_songpos(self): result = self.h.handle_request(u'addid "file:///dev/urandom"')