added some more spotify commands and merged session and handler code
This commit is contained in:
commit
455b920f93
@ -9,6 +9,9 @@ class BaseBackend(object):
|
|||||||
def playlist_changes(self, version):
|
def playlist_changes(self, version):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def load(self, name):
|
||||||
|
pass
|
||||||
|
|
||||||
# Status methods
|
# Status methods
|
||||||
def status_volume(self):
|
def status_volume(self):
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@ -13,3 +13,13 @@ class SpotifyBackend(BaseBackend):
|
|||||||
for playlist in self.spotify.stored_playlists:
|
for playlist in self.spotify.stored_playlists:
|
||||||
playlists += u'playlist: %s\n' % playlist.name
|
playlists += u'playlist: %s\n' % playlist.name
|
||||||
return playlists
|
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
|
||||||
|
|||||||
@ -20,7 +20,8 @@ def register(pattern):
|
|||||||
return decorator
|
return decorator
|
||||||
|
|
||||||
class MpdHandler(object):
|
class MpdHandler(object):
|
||||||
def __init__(self, backend=SpotifyBackend):
|
def __init__(self, session=None, backend=SpotifyBackend):
|
||||||
|
self.session = session
|
||||||
self.register_backend(backend())
|
self.register_backend(backend())
|
||||||
|
|
||||||
def handle_request(self, request):
|
def handle_request(self, request):
|
||||||
@ -54,7 +55,7 @@ class MpdHandler(object):
|
|||||||
|
|
||||||
@register(r'^close$')
|
@register(r'^close$')
|
||||||
def _close(self):
|
def _close(self):
|
||||||
pass # TODO
|
self.session.close_when_done()
|
||||||
|
|
||||||
@register(r'^consume (?P<state>[01])$')
|
@register(r'^consume (?P<state>[01])$')
|
||||||
def _consume(self, state):
|
def _consume(self, state):
|
||||||
@ -103,6 +104,7 @@ class MpdHandler(object):
|
|||||||
|
|
||||||
@register(r'^load (?P<name>.+)$')
|
@register(r'^load (?P<name>.+)$')
|
||||||
def _load(self, name):
|
def _load(self, name):
|
||||||
|
self.backend.load(name)
|
||||||
pass # TODO
|
pass # TODO
|
||||||
|
|
||||||
@register(r'^lsinfo( "(?P<uri>[^"]*)")*$')
|
@register(r'^lsinfo( "(?P<uri>[^"]*)")*$')
|
||||||
|
|||||||
@ -9,16 +9,21 @@ logger = logging.getLogger(u'session')
|
|||||||
class MpdSession(asynchat.async_chat):
|
class MpdSession(asynchat.async_chat):
|
||||||
def __init__(self, client_socket, client_address, handler=MpdHandler):
|
def __init__(self, client_socket, client_address, handler=MpdHandler):
|
||||||
asynchat.async_chat.__init__(self, sock=client_socket)
|
asynchat.async_chat.__init__(self, sock=client_socket)
|
||||||
|
self.client_address = client_address
|
||||||
self.input_buffer = []
|
self.input_buffer = []
|
||||||
self.set_terminator(settings.MPD_LINE_TERMINATOR)
|
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())
|
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):
|
def collect_incoming_data(self, data):
|
||||||
self.input_buffer.append(data)
|
self.input_buffer.append(data)
|
||||||
|
|
||||||
def found_terminator(self):
|
def found_terminator(self):
|
||||||
data = ''.join(self.input_buffer)
|
data = ''.join(self.input_buffer).strip()
|
||||||
self.input_buffer = []
|
self.input_buffer = []
|
||||||
input = data.decode(settings.MPD_LINE_ENCODING)
|
input = data.decode(settings.MPD_LINE_ENCODING)
|
||||||
logger.debug(u'Input: %s', input)
|
logger.debug(u'Input: %s', input)
|
||||||
|
|||||||
@ -418,9 +418,14 @@ class StickersHandlerTest(unittest.TestCase):
|
|||||||
pass # TODO
|
pass # TODO
|
||||||
|
|
||||||
|
|
||||||
|
class DummySession(object):
|
||||||
|
def close_when_done(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ConnectionHandlerTest(unittest.TestCase):
|
class ConnectionHandlerTest(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.h = handler.MpdHandler()
|
self.h = handler.MpdHandler(session=DummySession())
|
||||||
|
|
||||||
def test_close(self):
|
def test_close(self):
|
||||||
result = self.h.handle_request(u'close')
|
result = self.h.handle_request(u'close')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user