summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <wyskas@gmail.com>2009-10-10 09:20:04 +0200
committerAnton Khirnov <wyskas@gmail.com>2009-10-10 09:20:04 +0200
commit965494cf20b170b9916c2444b037250c7ae4764b (patch)
treea79c49d4419a48e3a8d802aadd39a14ca9eb54a1
parented994a9f50d52b31a420042e195574bdcf41038c (diff)
mpd: better error handling on connection failure
-rw-r--r--nephilim/mpd.py32
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):