From 965494cf20b170b9916c2444b037250c7ae4764b Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sat, 10 Oct 2009 09:20:04 +0200 Subject: mpd: better error handling on connection failure --- nephilim/mpd.py | 32 +++++++++++++++++++------------- 1 file 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): -- cgit v1.2.3