summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2010-11-28 17:29:30 +0100
committerAnton Khirnov <anton@khirnov.net>2011-09-04 20:17:34 +0200
commit2c32e72bfdeee82b55d38ca79b38ab9c847b3bd3 (patch)
treee02a972848320282dec6e69591040a7374b0ed09
parent1fdeede10d0a3a45e375c084e804c1ca01669425 (diff)
mpdsocket: support ignoring errors
apparrently there's no clean way to do some things (like querying whether a sticker exists) without triggering an error.
-rw-r--r--nephilim/mpdsocket.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/nephilim/mpdsocket.py b/nephilim/mpdsocket.py
index 005ddd2..685b3d8 100644
--- a/nephilim/mpdsocket.py
+++ b/nephilim/mpdsocket.py
@@ -43,7 +43,7 @@ class MPDSocket(QtCore.QObject):
#### PRIVATE ####
_logger = None
_sock = None
- """A list of callbacks that are waiting for a response from MPD."""
+ """A list of (callback, report_errors) that are waiting for a response from MPD."""
_cmd_queue = None
_is_idle = False
@@ -114,7 +114,12 @@ class MPDSocket(QtCore.QObject):
else:
callback = self._parse_discard
- self._cmd_queue.append(callback)
+ if 'report_errors' in kwargs:
+ report_errors = bool(kwargs['report_errors'])
+ else:
+ report_errors = True
+
+ self._cmd_queue.append((callback, report_errors))
if self._is_idle:
self._sock.write('noidle\n')
self._sock.write(args[0])
@@ -167,14 +172,15 @@ class MPDSocket(QtCore.QObject):
Escape backslashes and quotes before sending.
"""
return text.replace('\\', '\\\\').replace('"', '\\"')
- def _readline(self):
+ def _readline(self, report_errors = True):
"""
Read from the socket one line and return it, unless it's an
error or end of response.
"""
line = str(self._sock.readLine()).decode('utf-8').rstrip('\n')
if line.startswith(self.ERROR_PREFIX):
- self._logger.error('MPD returned error: %s'%line)
+ if report_errors:
+ self._logger.error('MPD returned error: %s'%line)
return
if line == self.SUCCESS:
return
@@ -262,16 +268,16 @@ class MPDSocket(QtCore.QObject):
# wait for more data
if not self._sock.canReadLine():
return
- self._cmd_queue[0](self._read_response())
+ self._cmd_queue[0][0](self._read_response(self._cmd_queue[0][1]))
del self._cmd_queue[0]
self._idle()
- def _read_response(self):
+ def _read_response(self, report_errors = True):
"""
An iterator over all lines in one response.
"""
while self._sock.canReadLine():
- line = self._readline()
+ line = self._readline(report_errors)
if not line:
raise StopIteration
yield line