X-Git-Url: https://git.kaliko.me/?p=python-musicpd.git;a=blobdiff_plain;f=mpd.py;h=373bd1672d835d6a0ecad229856d55cc3168d4f7;hp=7305f7d94eba202796d147894c9ecb671cc1381a;hb=92a072f152417f607bd4cc5f549972ba76a15cad;hpb=7299c4fd1a57ce290cbd4f9463deeebb02764e61 diff --git a/mpd.py b/mpd.py index 7305f7d..373bd16 100644 --- a/mpd.py +++ b/mpd.py @@ -1,5 +1,6 @@ # python-mpd: Python MPD client library # Copyright (C) 2008-2010 J. Alexander Treuman +# Copyright (C) 2012 Kaliko Jack # # python-mpd is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by @@ -84,6 +85,7 @@ class MPDClient(object): "previous": self._fetch_nothing, "seek": self._fetch_nothing, "seekid": self._fetch_nothing, + "seekcur": self._fetch_nothing, "stop": self._fetch_nothing, # Playlist Commands "add": self._fetch_nothing, @@ -124,6 +126,8 @@ class MPDClient(object): "listallinfo": self._fetch_database, "lsinfo": self._fetch_database, "search": self._fetch_songs, + "searchadd": self._fetch_nothing, + "searchaddpl": self._fetch_nothing, "update": self._fetch_item, "rescan": self._fetch_item, # Sticker Commands @@ -147,6 +151,12 @@ class MPDClient(object): "tagtypes": self._fetch_list, "urlhandlers": self._fetch_list, "decoders": self._fetch_plugins, + # Client to Client + "subscribe": self._fetch_nothing, + "unsubscribe": self._fetch_nothing, + "channels": self._fetch_list, + "readmessages": self._fetch_messages, + "sendmessage": self._fetch_nothing, } def __getattr__(self, attr): @@ -226,6 +236,7 @@ class MPDClient(object): def _read_line(self): line = self._rfile.readline() if not line.endswith("\n"): + self.disconnect() raise ConnectionError("Connection lost while reading line") line = line.rstrip("\n") if line.startswith(ERROR_PREFIX): @@ -352,6 +363,9 @@ class MPDClient(object): def _fetch_plugins(self): return self._fetch_objects(["plugin"]) + def _fetch_messages(self): + return self._fetch_objects(["channel"]) + def _fetch_command_list(self): return self._wrap_iterator(self._read_command_list()) @@ -396,11 +410,12 @@ class MPDClient(object): sock = socket.socket(af, socktype, proto) sock.connect(sa) return sock - except socket.error, err: + except socket.error as socket_err: + err = socket_err if sock is not None: sock.close() if err is not None: - raise err + raise ConnectionError(str(err)) else: raise ConnectionError("getaddrinfo returns an empty list") @@ -411,8 +426,8 @@ class MPDClient(object): self._sock = self._connect_unix(host) else: self._sock = self._connect_tcp(host, port) - self._rfile = self._sock.makefile("rb") - self._wfile = self._sock.makefile("wb") + self._rfile = self._sock.makefile("r") + self._wfile = self._sock.makefile("w") try: self._hello() except: @@ -420,9 +435,15 @@ class MPDClient(object): raise def disconnect(self): - self._rfile.close() - self._wfile.close() - self._sock.close() + if isinstance(self._rfile, socket._fileobject): + print('closing r socket') + self._rfile.close() + if isinstance(self._wfile, socket._fileobject): + print('closing w socket') + self._wfile.close() + if isinstance(self._sock, socket.socket): + print('closing socket') + self._sock.close() self._reset() def fileno(self):