From d1b74dfcb65ce2cc424541b92f8415e615bd0c3a Mon Sep 17 00:00:00 2001 From: kelciour Date: Fri, 26 Jun 2020 22:24:44 +0300 Subject: [PATCH] Fix no sound after mpv restart --- qt/aqt/mpv.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/qt/aqt/mpv.py b/qt/aqt/mpv.py index c5b8a1e29..d991f69b9 100644 --- a/qt/aqt/mpv.py +++ b/qt/aqt/mpv.py @@ -245,10 +245,13 @@ class MPVBase: else: r, w, e = select.select([self._sock], [], [], 1) if r: - b = self._sock.recv(1024) - if not b: - break - buf += b + try: + b = self._sock.recv(1024) + if not b: + break + buf += b + except ConnectionResetError: + return newline = buf.find(b"\n") while newline >= 0: @@ -373,7 +376,7 @@ class MPVBase: return self._get_response(timeout) except MPVCommandError as e: raise MPVCommandError("%r: %s" % (message["command"], e)) - except MPVTimeoutError as e: + except Exception as e: if _retry: print("mpv timed out, restarting") self._stop_process() @@ -400,6 +403,7 @@ class MPVBase: self._start_socket() self._prepare_thread() self._start_thread() + self._register_callbacks() def close(self): """Shutdown the mpv process and our communication setup. @@ -438,6 +442,9 @@ class MPV(MPVBase): super().__init__(*args, **kwargs) + self._register_callbacks() + + def _register_callbacks(self): self._callbacks = {} self._property_serials = {} self._new_serial = iter(range(sys.maxsize)) @@ -483,16 +490,10 @@ class MPV(MPVBase): """Start up the communication threads. """ super()._start_thread() - self._event_thread = threading.Thread(target=self._event_reader) - 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() + if not hasattr(self, "_event_thread"): + self._event_thread = threading.Thread(target=self._event_reader) + self._event_thread.daemon = True + self._event_thread.start() # # Event/callback API @@ -500,7 +501,7 @@ class MPV(MPVBase): def _event_reader(self): """Collect incoming event messages and call the event handler. """ - while not self._stop_event.is_set(): + while True: message = self._get_event(timeout=1) if message is None: continue