added command_list_begin and command_list_end support by buffering responses
This commit is contained in:
parent
f9c156014d
commit
7a6ea8736c
@ -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):
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user