diff --git a/mopidy/backends/backend.py b/mopidy/backends/backend.py index c95fe685..17a74bd3 100644 --- a/mopidy/backends/backend.py +++ b/mopidy/backends/backend.py @@ -9,6 +9,9 @@ class BaseBackend(object): def playlist_changes(self, version): return None + def load(self, name): + pass + # Status methods def status_volume(self): return 0 diff --git a/mopidy/backends/spotify_backend.py b/mopidy/backends/spotify_backend.py index 33b83312..83b2081f 100644 --- a/mopidy/backends/spotify_backend.py +++ b/mopidy/backends/spotify_backend.py @@ -13,3 +13,13 @@ class SpotifyBackend(BaseBackend): for playlist in self.spotify.stored_playlists: playlists += u'playlist: %s\n' % playlist.name return playlists + + def load(self, name): + for playlist in self.spotify.stored_playlists: + if playlist.name == 'name': + break + + tracks = u'' + for track in playlist.tracks: + tracks += u'add %s\n' % track.file_id + return tracks diff --git a/mopidy/handler.py b/mopidy/handler.py index de4f42b7..46fd5498 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -20,7 +20,8 @@ def register(pattern): return decorator class MpdHandler(object): - def __init__(self, backend=SpotifyBackend): + def __init__(self, session=None, backend=SpotifyBackend): + self.session = session self.register_backend(backend()) def handle_request(self, request): @@ -54,7 +55,7 @@ class MpdHandler(object): @register(r'^close$') def _close(self): - pass # TODO + self.session.close_when_done() @register(r'^consume (?P[01])$') def _consume(self, state): @@ -103,6 +104,7 @@ class MpdHandler(object): @register(r'^load (?P.+)$') def _load(self, name): + self.backend.load(name) pass # TODO @register(r'^lsinfo( "(?P[^"]*)")*$') diff --git a/mopidy/session.py b/mopidy/session.py index 331419f5..805d0d96 100644 --- a/mopidy/session.py +++ b/mopidy/session.py @@ -9,16 +9,21 @@ logger = logging.getLogger(u'session') class MpdSession(asynchat.async_chat): def __init__(self, client_socket, client_address, handler=MpdHandler): asynchat.async_chat.__init__(self, sock=client_socket) + self.client_address = client_address self.input_buffer = [] self.set_terminator(settings.MPD_LINE_TERMINATOR) - self.handler = handler() + self.handler = handler(session=self) self.send_response(u'OK MPD %s' % get_mpd_version()) + def close_when_done(self): + logger.info(u'Closing connection with [%s]:%s', *self.client_address) + asynchat.async_chat.close_when_done(self) + def collect_incoming_data(self, data): self.input_buffer.append(data) def found_terminator(self): - data = ''.join(self.input_buffer) + data = ''.join(self.input_buffer).strip() self.input_buffer = [] input = data.decode(settings.MPD_LINE_ENCODING) logger.debug(u'Input: %s', input) diff --git a/tests/handlertest.py b/tests/handlertest.py index 7e07c3a5..5c47e232 100644 --- a/tests/handlertest.py +++ b/tests/handlertest.py @@ -418,9 +418,14 @@ class StickersHandlerTest(unittest.TestCase): pass # TODO +class DummySession(object): + def close_when_done(self): + pass + + class ConnectionHandlerTest(unittest.TestCase): def setUp(self): - self.h = handler.MpdHandler() + self.h = handler.MpdHandler(session=DummySession()) def test_close(self): result = self.h.handle_request(u'close')