]> kaliko git repositories - python-musicpdaio.git/commitdiff
Support commands arguments
authorkaliko <kaliko@azylum.org>
Mon, 9 Nov 2015 13:54:04 +0000 (14:54 +0100)
committerkaliko <kaliko@azylum.org>
Mon, 9 Nov 2015 13:54:04 +0000 (14:54 +0100)
musicpdaio.py

index 1663b2727183235a74b65c9fe447b4ca414a0e5b..4339f72a7ecb023c7b2d296a315bfd92856bab5f 100644 (file)
@@ -27,6 +27,7 @@ import logging
 
 from os import environ
 if 'DEBUG' in environ or 'PYTHONASYNCIODEBUG' in environ:
+    # environ['PYTHONASYNCIODEBUG'] = '1'
     logging.basicConfig(level=logging.DEBUG)
 
 HELLO_PREFIX = "OK MPD "
@@ -48,15 +49,6 @@ class ProtocolError(MPDError):
 class CommandError(MPDError):
     pass
 
-class CommandListError(MPDError):
-    pass
-
-class PendingCommandError(MPDError):
-    pass
-
-class IteratingError(MPDError):
-    pass
-
 
 class Response:
     def __init__(self):
@@ -69,8 +61,8 @@ class Response:
                 self.version)
 
 class MPDProto(asyncio.Protocol):
-    def __init__(self, future, payload, pwd):
-        self.pwd = pwd
+    def __init__(self, future, payload):
+        logging.debug('payload: "%s"', payload)
         self.transport = None
         self.future = future
         self.payload = payload
@@ -110,6 +102,12 @@ class MPDProto(asyncio.Protocol):
         return rcv
 
 class MPDClient:
+    """MPD Client
+    :param string host: Server name or IP, default to 'localhost'
+    :param integer port: Server port, default to 6600
+    :param string passwd: Password, default to ``None``
+
+    """
 
     def __init__(self, host='localhost', port=6600, passwd=None):
         self._evloop = asyncio.get_event_loop()
@@ -117,11 +115,13 @@ class MPDClient:
         self.futures = []
         self._host = host
         self._port = port
-        self._pwd = passwd
+        #self._pwd = passwd  # TODO: authentication yet to implement
         self._commands = {
                 'currentsong',
                 'stats',
                 'playlistinfo',
+                'next',
+                'find',
         }
 
     def __getattr__(self, attr):
@@ -147,10 +147,12 @@ class MPDClient:
             proto.future.set_exception(ConnectionError(err))
 
     def _command(self, command, args):
-        payload = '{} {}'.format(command, ''.join(args))
+        payload = command
+        for arg in args:
+            payload += ' "{}"'.format(escape(arg))
         future = asyncio.Future()
         # kick off a task to create the connection to MPD
-        coro = self._connect(MPDProto(future, payload, self._pwd))
+        coro = self._connect(MPDProto(future, payload))
         asyncio.async(coro)
         self.futures.append(future)
         if not self.asio:
@@ -171,3 +173,9 @@ class MPDClient:
            self.futures = []
         else:
             logging.info('No task found in queue, need to set self.asio?')
+
+
+def escape(text):
+    """Escapting quotes and backslash"""
+    return text.replace('\\', '\\\\').replace('"', '\\"')
+