Fix no sound after mpv restart

This commit is contained in:
kelciour 2020-06-26 22:24:44 +03:00
parent 422e313c16
commit d1b74dfcb6

View file

@ -245,10 +245,13 @@ class MPVBase:
else: else:
r, w, e = select.select([self._sock], [], [], 1) r, w, e = select.select([self._sock], [], [], 1)
if r: if r:
b = self._sock.recv(1024) try:
if not b: b = self._sock.recv(1024)
break if not b:
buf += b break
buf += b
except ConnectionResetError:
return
newline = buf.find(b"\n") newline = buf.find(b"\n")
while newline >= 0: while newline >= 0:
@ -373,7 +376,7 @@ class MPVBase:
return self._get_response(timeout) return self._get_response(timeout)
except MPVCommandError as e: except MPVCommandError as e:
raise MPVCommandError("%r: %s" % (message["command"], e)) raise MPVCommandError("%r: %s" % (message["command"], e))
except MPVTimeoutError as e: except Exception as e:
if _retry: if _retry:
print("mpv timed out, restarting") print("mpv timed out, restarting")
self._stop_process() self._stop_process()
@ -400,6 +403,7 @@ class MPVBase:
self._start_socket() self._start_socket()
self._prepare_thread() self._prepare_thread()
self._start_thread() self._start_thread()
self._register_callbacks()
def close(self): def close(self):
"""Shutdown the mpv process and our communication setup. """Shutdown the mpv process and our communication setup.
@ -438,6 +442,9 @@ class MPV(MPVBase):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self._register_callbacks()
def _register_callbacks(self):
self._callbacks = {} self._callbacks = {}
self._property_serials = {} self._property_serials = {}
self._new_serial = iter(range(sys.maxsize)) self._new_serial = iter(range(sys.maxsize))
@ -483,16 +490,10 @@ class MPV(MPVBase):
"""Start up the communication threads. """Start up the communication threads.
""" """
super()._start_thread() super()._start_thread()
self._event_thread = threading.Thread(target=self._event_reader) if not hasattr(self, "_event_thread"):
self._event_thread.daemon = True self._event_thread = threading.Thread(target=self._event_reader)
self._event_thread.start() self._event_thread.daemon = True
self._event_thread.start()
def _stop_thread(self):
"""Stop the communication threads.
"""
super()._stop_thread()
if hasattr(self, "_event_thread"):
self._event_thread.join()
# #
# Event/callback API # Event/callback API
@ -500,7 +501,7 @@ class MPV(MPVBase):
def _event_reader(self): def _event_reader(self):
"""Collect incoming event messages and call the event handler. """Collect incoming event messages and call the event handler.
""" """
while not self._stop_event.is_set(): while True:
message = self._get_event(timeout=1) message = self._get_event(timeout=1)
if message is None: if message is None:
continue continue