added command_list_begin and command_list_end support by buffering responses

This commit is contained in:
Johannes Knutsen 2009-12-25 20:30:33 +01:00
parent f9c156014d
commit 7a6ea8736c
3 changed files with 33 additions and 5 deletions

View File

@ -97,10 +97,17 @@ class SpotifyBackend(BaseBackend):
def playlists_list(self): def playlists_list(self):
return [u'playlist: %s' % decode(p.name) for p in self._playlists] 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): def playlist_changes(self, songpos):
tracks = [] tracks = []
for i, track in enumerate(self._current_playlist): if songpos:
tracks.extend(self._format_track(track, i)) 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 return tracks
def stop(self): def stop(self):

View File

@ -23,15 +23,32 @@ class MpdHandler(object):
self.session = session self.session = session
self.backend = backend self.backend = backend
self.buffer = False
def handle_request(self, request): def handle_request(self, request):
for pattern in _request_handlers: for pattern in _request_handlers:
matches = re.match(pattern, request) matches = re.match(pattern, request)
if matches is not None: if matches is not None:
groups = matches.groupdict() 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) logger.warning(u'Unhandled request: %s', request)
return False 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<uri>[^"]*)"$') @register(r'^add "(?P<uri>[^"]*)"$')
def _add(self, uri): def _add(self, uri):
pass # TODO pass # TODO

View File

@ -37,15 +37,19 @@ class MpdSession(asynchat.async_chat):
def handle_request(self, input): def handle_request(self, input):
response = self.handler.handle_request(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): if isinstance(response, list):
for line in response: for line in response:
self.send_response(line) self.handle_response(line)
elif isinstance(response, dict): elif isinstance(response, dict):
for key, value in response.items(): for key, value in response.items():
self.send_response(u'%s: %s' % (key, value)) self.send_response(u'%s: %s' % (key, value))
elif response is not None: elif response is not None:
self.send_response(response) self.send_response(response)
self.send_response(u'OK')
def send_response(self, output): def send_response(self, output):
logger.debug(u'Output: %s', output) logger.debug(u'Output: %s', output)