X-Git-Url: http://git.kaliko.me/?p=python-musicpd.git;a=blobdiff_plain;f=musicpd.py;h=eeb4b9a81c4a04d7b856fa5e679356ddfee78af6;hp=1a64271399d4716b3be42ac5c7991941faefde80;hb=0ef97395765f66ec3dc4ec67f813d156fea885f8;hpb=72c3f57ce7971bb440ca3591d99b7638efa3547b diff --git a/musicpd.py b/musicpd.py index 1a64271..eeb4b9a 100644 --- a/musicpd.py +++ b/musicpd.py @@ -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()