]> kaliko git repositories - python-musicpd.git/blobdiff - musicpd.py
Update commands list in test
[python-musicpd.git] / musicpd.py
index 1a64271399d4716b3be42ac5c7991941faefde80..eeb4b9a81c4a04d7b856fa5e679356ddfee78af6 100644 (file)
@@ -300,15 +300,21 @@ class MPDClient:
         self.host = 'localhost'
         self.pwd = None
         self.port = os.getenv('MPD_PORT', '6600')
-        mpd_host_env = os.getenv('MPD_HOST')
-        if mpd_host_env:
-            # If password is set:
-            # mpd_host_env = ['pass', 'host'] because MPD_HOST=pass@host
-            mpd_host_env = mpd_host_env.split('@')
-            mpd_host_env.reverse()
-            self.host = mpd_host_env[0]
-            if len(mpd_host_env) > 1 and mpd_host_env[1]:
-                self.pwd = mpd_host_env[1]
+        if os.getenv('MPD_HOST'):
+            # If password is set: MPD_HOST=pass@host
+            if '@' in os.getenv('MPD_HOST'):
+                mpd_host_env = os.getenv('MPD_HOST').split('@', 1)
+                if mpd_host_env[0]:
+                    # A password is actually set
+                    self.pwd = mpd_host_env[0]
+                    if mpd_host_env[1]:
+                        self.host = mpd_host_env[1]
+                elif mpd_host_env[1]:
+                    # No password set but leading @ is an abstract socket
+                    self.host = '@'+mpd_host_env[1]
+            else:
+                # MPD_HOST is a plain host
+                self.host = os.getenv('MPD_HOST')
         else:
             # Is socket there
             xdg_runtime_dir = os.getenv('XDG_RUNTIME_DIR', '/run')
@@ -563,7 +569,7 @@ class MPDClient:
             obj['data'] = self._read_binary(amount)
         except IOError as err:
             raise ConnectionError('Error reading binary content: %s' % err)
-        if len(obj['data']) != amount:
+        if len(obj['data']) != amount:  # can we ever get there?
             raise ConnectionError('Error reading binary content: '
                       'Expects %sB, got %s' % (amount, len(obj['data'])))
         # Fetches trailing new line
@@ -599,6 +605,9 @@ class MPDClient:
         if not hasattr(socket, "AF_UNIX"):
             raise ConnectionError(
                 "Unix domain sockets not supported on this platform")
+        # abstract socket
+        if path.startswith('@'):
+            path = '\0'+path[1:]
         sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
         sock.connect(path)
         return sock
@@ -671,7 +680,7 @@ class MPDClient:
             self.port = port
         if self._sock is not None:
             raise ConnectionError("Already connected")
-        if host.startswith("/"):
+        if host[0] in ['/', '@']:
             self._sock = self._connect_unix(host)
         else:
             self._sock = self._connect_tcp(host, port)
@@ -700,6 +709,9 @@ class MPDClient:
         self._reset()
 
     def fileno(self):
+        """Return the socket’s file descriptor (a small integer).
+        This is useful with :py:obj:`select.select`.
+        """
         if self._sock is None:
             raise ConnectionError("Not connected")
         return self._sock.fileno()