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):
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):

View File

@ -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<uri>[^"]*)"$')
def _add(self, uri):
pass # TODO

View File

@ -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)