修复mpd在线检测,mpd掉线时死循环的bug
parent
271a8838fb
commit
8fd907e805
25
mpd.py
25
mpd.py
|
@ -447,7 +447,8 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
'offline': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
'offline': (GObject.SignalFlags.RUN_FIRST, None, ()),
|
||||||
'playing': (GObject.SignalFlags.RUN_FIRST, None, (object, object)),
|
'playing': (GObject.SignalFlags.RUN_FIRST, None, (object, object)),
|
||||||
'song_changed': (GObject.SignalFlags.RUN_FIRST, None, (object, object)),
|
'song_changed': (GObject.SignalFlags.RUN_FIRST, None, (object, object)),
|
||||||
'state_changed': (GObject.SignalFlags.RUN_FIRST, None, (object,))
|
'state_changed': (GObject.SignalFlags.RUN_FIRST, None, (object,)),
|
||||||
|
'error': (GObject.SignalFlags.RUN_FIRST, None, (object,))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -543,7 +544,7 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
def _read_line(self):
|
def _read_line(self):
|
||||||
line = self._rbfile.readline().decode("utf-8")
|
line = self._rbfile.readline().decode("utf-8")
|
||||||
if not line.endswith("\n"):
|
if not line.endswith("\n"):
|
||||||
self.end()
|
self.destroy()
|
||||||
raise ConnectionError("Connection lost while reading line")
|
raise ConnectionError("Connection lost while reading line")
|
||||||
line = line.rstrip("\n")
|
line = line.rstrip("\n")
|
||||||
if line.startswith(ERROR_PREFIX):
|
if line.startswith(ERROR_PREFIX):
|
||||||
|
@ -597,7 +598,7 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
value = self._read_chunk(chunk_size)
|
value = self._read_chunk(chunk_size)
|
||||||
|
|
||||||
if len(value) != chunk_size:
|
if len(value) != chunk_size:
|
||||||
self.end()
|
self.destroy()
|
||||||
raise ConnectionError(
|
raise ConnectionError(
|
||||||
"Connection lost while reading binary data: "
|
"Connection lost while reading binary data: "
|
||||||
"expected %d bytes, got %d" % (chunk_size, len(value))
|
"expected %d bytes, got %d" % (chunk_size, len(value))
|
||||||
|
@ -605,7 +606,7 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
|
|
||||||
if self._rbfile.read(1) != b"\n":
|
if self._rbfile.read(1) != b"\n":
|
||||||
# newline after binary content
|
# newline after binary content
|
||||||
self.end()
|
self.destroy()
|
||||||
raise ConnectionError("Connection lost while reading line")
|
raise ConnectionError("Connection lost while reading line")
|
||||||
|
|
||||||
obj[key] = value
|
obj[key] = value
|
||||||
|
@ -685,7 +686,7 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
|
|
||||||
def _check_is_mpd_server(self, line):
|
def _check_is_mpd_server(self, line):
|
||||||
if not line.endswith("\n"):
|
if not line.endswith("\n"):
|
||||||
self.end()
|
self.destroy()
|
||||||
return
|
return
|
||||||
|
|
||||||
line = line.rstrip("\n")
|
line = line.rstrip("\n")
|
||||||
|
@ -725,7 +726,7 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
||||||
if e.strerror == 'Connection refused':
|
if e.strerror == 'Connection refused':
|
||||||
self.emit('offline', True)
|
self.emit('offline')
|
||||||
else:
|
else:
|
||||||
self.emit('error', e)
|
self.emit('error', e)
|
||||||
|
|
||||||
|
@ -775,7 +776,10 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.connected = False
|
self.connected = False
|
||||||
self.end()
|
self.destroy()
|
||||||
|
|
||||||
|
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
|
|
||||||
def heart_beat(self):
|
def heart_beat(self):
|
||||||
|
@ -809,7 +813,7 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
self.end()
|
self.destroy()
|
||||||
self.start()
|
self.start()
|
||||||
|
|
||||||
|
|
||||||
|
@ -819,11 +823,8 @@ class MPDClient(MPDClientBase, GObject.Object):
|
||||||
self.emit('online')
|
self.emit('online')
|
||||||
self.heart_beat()
|
self.heart_beat()
|
||||||
|
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
self.end()
|
|
||||||
|
|
||||||
|
|
||||||
def end(self):
|
|
||||||
if self._rbfile is not None:
|
if self._rbfile is not None:
|
||||||
self._rbfile.close()
|
self._rbfile.close()
|
||||||
if self._wfile is not None:
|
if self._wfile is not None:
|
||||||
|
|
Loading…
Reference in New Issue