From 7a6ea8736cba16688aea6bb0868ceaa9dbfe174d Mon Sep 17 00:00:00 2001 From: Johannes Knutsen Date: Fri, 25 Dec 2009 20:30:33 +0100 Subject: [PATCH] added command_list_begin and command_list_end support by buffering responses --- mopidy/backends/spotify.py | 11 +++++++++-- mopidy/handler.py | 19 ++++++++++++++++++- mopidy/session.py | 8 ++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/mopidy/backends/spotify.py b/mopidy/backends/spotify.py index 74741851..e2830124 100644 --- a/mopidy/backends/spotify.py +++ b/mopidy/backends/spotify.py @@ -97,10 +97,17 @@ class SpotifyBackend(BaseBackend): def playlists_list(self): return [u'playlist: %s' % decode(p.name) for p in self._playlists] + def playlist_info(self, songpos, start, end): + return self.playlist_changes(songpos) + def playlist_changes(self, songpos): tracks = [] - for i, track in enumerate(self._current_playlist): - tracks.extend(self._format_track(track, i)) + if songpos: + track = self._current_playlist[int(songpos)] + tracks.extend(self._format_track(track, int(songpos))) + else: + for i, track in enumerate(self._current_playlist): + tracks.extend(self._format_track(track, i)) return tracks def stop(self): diff --git a/mopidy/handler.py b/mopidy/handler.py index 0c53aaa0..ad65000d 100644 --- a/mopidy/handler.py +++ b/mopidy/handler.py @@ -23,15 +23,32 @@ class MpdHandler(object): self.session = session self.backend = backend + self.buffer = False + def handle_request(self, request): for pattern in _request_handlers: matches = re.match(pattern, request) if matches is not None: groups = matches.groupdict() - return _request_handlers[pattern](self, **groups) + response = _request_handlers[pattern](self, **groups) + if self.buffer: + self.response_buffer.append(response) + return None + else: + return response logger.warning(u'Unhandled request: %s', request) return False + @register(r'^command_list_begin$') + def _command_list_begin(self): + self.response_buffer = [] + self.buffer = True + + @register(r'^command_list_end$') + def _command_list_end(self): + self.buffer = False + return self.response_buffer + @register(r'^add "(?P[^"]*)"$') def _add(self, uri): pass # TODO diff --git a/mopidy/session.py b/mopidy/session.py index 12385244..22ac7301 100644 --- a/mopidy/session.py +++ b/mopidy/session.py @@ -37,15 +37,19 @@ class MpdSession(asynchat.async_chat): def handle_request(self, input): response = self.handler.handle_request(input) + self.handle_response(response) + if not self.handler.buffer: + self.send_response(u'OK') + + def handle_response(self, response): if isinstance(response, list): for line in response: - self.send_response(line) + self.handle_response(line) elif isinstance(response, dict): for key, value in response.items(): self.send_response(u'%s: %s' % (key, value)) elif response is not None: self.send_response(response) - self.send_response(u'OK') def send_response(self, output): logger.debug(u'Output: %s', output)