修复mpd在线检测,mpd掉线时死循环的bug

master
yutent 2023-08-24 14:49:18 +08:00
parent 271a8838fb
commit 8fd907e805
1 changed files with 14 additions and 13 deletions

25
mpd.py
View File

@ -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: