X-Git-Url: http://git.kaliko.me/?p=python-musicpd.git;a=blobdiff_plain;f=mpd.py;h=e2ef2e82ca7e8c63c9e53a15adaf0675d0edfe63;hp=d7aaf5d46306831895564a53a9f43f2b4361ebdb;hb=8ec145e72766913295c842c0622952c0e50a73a7;hpb=4aca8706d2349557ea5cac23c104b5d5061c8ee1 diff --git a/mpd.py b/mpd.py index d7aaf5d..e2ef2e8 100644 --- a/mpd.py +++ b/mpd.py @@ -54,13 +54,17 @@ class MPDClient(object): # Status Commands "clearerror": self._getnone, "currentsong": self._getobject, + "idle": self._getlist, + "noidle": None, "status": self._getobject, "stats": self._getobject, # Playback Option Commands + "consume": self._getnone, "crossfade": self._getnone, "random": self._getnone, "repeat": self._getnone, "setvol": self._getnone, + "single": self._getnone, "volume": self._getnone, # Playback Control Commands "next": self._getnone, @@ -92,6 +96,7 @@ class MPDClient(object): # Stored Playlist Commands "listplaylist": self._getlist, "listplaylistinfo": self._getsongs, + "listplaylists": self._getplaylists, "load": self._getnone, "playlistadd": self._getnone, "playlistclear": self._getnone, @@ -262,6 +267,9 @@ class MPDClient(object): def _getsongs(self): return self._getobjects(["file"]) + def _getplaylists(self): + return self._getobjects(["playlist"]) + def _getdatabase(self): return self._getobjects(["file", "directory", "playlist"]) @@ -290,29 +298,41 @@ class MPDClient(object): self._rfile = _NotConnected() self._wfile = _NotConnected() - def connect(self, host, port): - if self._sock: - raise ConnectionError("Already connected") - msg = "getaddrinfo returns an empty list" + def _unix_connect(self, path): + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(path) + return sock + + def _tcp_connect(self, host, port): try: flags = socket.AI_ADDRCONFIG except AttributeError: flags = 0 + msg = "getaddrinfo returns an empty list" for res in socket.getaddrinfo(host, port, socket.AF_UNSPEC, socket.SOCK_STREAM, socket.IPPROTO_TCP, flags): af, socktype, proto, canonname, sa = res try: - self._sock = socket.socket(af, socktype, proto) - self._sock.connect(sa) + sock = socket.socket(af, socktype, proto) + sock.connect(sa) except socket.error, msg: - if self._sock: - self._sock.close() - self._sock = None + if sock: + sock.close() + sock = None continue break - if not self._sock: + if not sock: raise socket.error(msg) + return sock + + def connect(self, host, port): + if self._sock: + raise ConnectionError("Already connected") + if host.startswith("/"): + self._sock = self._unix_connect(host) + else: + self._sock = self._tcp_connect(host, port) self._rfile = self._sock.makefile("rb") self._wfile = self._sock.makefile("wb") try: