diff options
author | Anton Khirnov <wyskas@gmail.com> | 2009-10-10 09:20:04 +0200 |
---|---|---|
committer | Anton Khirnov <wyskas@gmail.com> | 2009-10-10 09:20:04 +0200 |
commit | 965494cf20b170b9916c2444b037250c7ae4764b (patch) | |
tree | a79c49d4419a48e3a8d802aadd39a14ca9eb54a1 /nephilim | |
parent | ed994a9f50d52b31a420042e195574bdcf41038c (diff) |
mpd: better error handling on connection failure
Diffstat (limited to 'nephilim')
-rw-r--r-- | nephilim/mpd.py | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/nephilim/mpd.py b/nephilim/mpd.py index b2cb119..7e0b739 100644 --- a/nephilim/mpd.py +++ b/nephilim/mpd.py @@ -146,14 +146,13 @@ class MPDClient(QtCore.QObject): return lambda *args: self._docommand(attr, args, retval) def _docommand(self, command, args, retval): + if not self.__sock: + self.logger.error('Cannot send command: not connected.') + return None if self._commandlist is not None and not callable(retval): raise CommandListError("%s not allowed in command list" % command) - try: - self._writecommand(command, args) - except socket.error, e: - self.logger.error('Error sending command: %s.'%e) - self.disconnect_mpd() - return None + + self._writecommand(command, args) if self._commandlist is None: if callable(retval): @@ -288,8 +287,9 @@ class MPDClient(QtCore.QObject): self._commandlist = None raise - def __handle_error(self): - self.logger.error(self.errorString()) + def __handle_error(self, error): + self.logger.error(self.__sock.errorString()) + self.disconnect_mpd() def connect_mpd(self, host, port): if self.__sock: @@ -321,14 +321,20 @@ class MPDClient(QtCore.QObject): self.connect_changed.emit(True) def disconnect_mpd(self): - try: - self.__sock.disconnectFromHost() - except AttributeError: - self.__sock.disconnectFromServer() + if self.__sock: + try: + self.__sock.disconnectFromHost() + except AttributeError: + self.__sock.disconnectFromServer() + + if self.__sock.state() != QtNetwork.QAbstractSocket.UnconnectedState\ + and not self.__sock.waitForDisconnected(5000): + self.__sock.abort() + + self.__sock = None self.mpd_version = None self._commandlist = None - self.__sock = None self.connect_changed.emit(False) def command_list_ok_begin(self): |