From 6cdbf4f1b92163d650f730269ed4b5d4624b4820 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 23 Mar 2024 10:00:47 +0100 Subject: [PATCH] forward pause/play to peers --- player/player.py | 39 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/player/player.py b/player/player.py index f437540..c3e5cb1 100755 --- a/player/player.py +++ b/player/player.py @@ -93,6 +93,7 @@ class Sync(Thread): self.mpv.register_key_binding('q', self.q_binding) self.mpv.register_key_binding('s', self.s_binding) self.mpv.register_key_binding('p', self.p_binding) + self.mpv.register_key_binding('SPACE', self.space_binding) self.playlist = kwargs['playlist'] self.playlist_mtime = os.stat(self.playlist).st_mtime self.mpv.loadlist(self.playlist) @@ -152,18 +153,34 @@ class Sync(Thread): self.mpv.stop() def q_binding(self, *args): + if args[0] != 'd-': + return self.stop() self.mpv.stop() + def space_binding(self, *args): + if args[0] != 'd-': + return + if self.mpv.pause: + self.p_binding(*args) + else: + self.s_binding(*args) + def s_binding(self, *args): + if args[0] != 'd-': + return self.mpv.pause = True if self.sax: self.sax.pause = True + self.send_playback_state() def p_binding(self, *args): + if args[0] != 'd-': + return self.mpv.pause = False if self.sax: self.sax.pause = False + self.send_playback_state() def stop(self, *args): self.active = False @@ -251,21 +268,37 @@ class Sync(Thread): except socket.error as e: logger.error("send failed: %s", e) + def send_playback_state(self): + state = 'pause' if self.mpv.pause else 'play' + msg = ("%s -1" % state).encode() + try: + self.sock.send(msg) + except socket.error as e: + logger.error("send failed: %s", e) + # # follower specific # + _last_ping = None def read_position_main(self): self.sock.settimeout(5) try: data = self.sock.recvfrom(1024)[0].decode().split(" ", 1) except socket.timeout: - logger.error("failed to receive data from main") + if self._last_ping != "pause": + logger.error("failed to receive data from main") except OSError: logger.error("socket closed") else: - self.main.time_pos = float(data[0]) - self.main.playlist_current_pos = int(data[1]) + self._last_ping = data[0] + if data[0] == "pause": + self.mpv.pause = True + elif data[0] == "play": + self.mpv.pause = False + else: + self.main.time_pos = float(data[0]) + self.main.playlist_current_pos = int(data[1]) def adjust_position(self): if self.mpv.time_pos is not None: