From 8f3c855d449d736e8d345e263384352c257fa72d Mon Sep 17 00:00:00 2001 From: Et0h Date: Mon, 26 Dec 2016 11:35:46 +0000 Subject: [PATCH 1/5] Use localised message for "Pausing" and "Initial readiness state" messages (reported by Corwin) --- syncplay/ui/GuiConfiguration.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/syncplay/ui/GuiConfiguration.py b/syncplay/ui/GuiConfiguration.py index aa5bdb0..7de7295 100644 --- a/syncplay/ui/GuiConfiguration.py +++ b/syncplay/ui/GuiConfiguration.py @@ -628,7 +628,7 @@ class ConfigDialog(QtGui.QDialog): # Initial state - self.readyInitialGroup = QtGui.QGroupBox(u"Initial readiness state") + self.readyInitialGroup = QtGui.QGroupBox(getMessage("readiness-title")) self.readyInitialLayout = QtGui.QVBoxLayout() self.readyInitialGroup.setLayout(self.readyInitialLayout) self.readyatstartCheckbox = QCheckBox(getMessage("readyatstart-label")) @@ -637,7 +637,7 @@ class ConfigDialog(QtGui.QDialog): self.readyLayout.addWidget(self.readyInitialGroup) # Automatically pausing - self.readyPauseGroup = QtGui.QGroupBox(u"Pausing") + self.readyPauseGroup = QtGui.QGroupBox(getMessage("pausing-title")) self.readyPauseLayout = QtGui.QVBoxLayout() self.readyPauseGroup.setLayout(self.readyPauseLayout) self.pauseonleaveCheckbox = QCheckBox(getMessage("pauseonleave-label")) From fde8c05117aa4a82d816bb69f8292c103270dc6b Mon Sep 17 00:00:00 2001 From: Et0h Date: Fri, 30 Dec 2016 13:41:09 +0000 Subject: [PATCH 2/5] Wait for STDOUT in VLC for non-Windows systems (to resolve#125 reported by blaenk) --- syncplay/constants.py | 1 - syncplay/players/vlc.py | 8 +++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/syncplay/constants.py b/syncplay/constants.py index 0ac95d5..cd04f45 100644 --- a/syncplay/constants.py +++ b/syncplay/constants.py @@ -54,7 +54,6 @@ DO_NOT_RESET_POSITION_THRESHOLD = 1.0 SYNC_ON_PAUSE = True # Client seek to global position - subtitles may disappear on some media players PLAYLIST_MAX_CHARACTERS = 10000 PLAYLIST_MAX_ITEMS = 250 -VLC_LISTEN_FOR_STDOUT = False # Changing to True this could break VLC 3 on Windows # Options for the File Switch feature: FOLDER_SEARCH_FIRST_FILE_TIMEOUT = 15.0 # Secs - How long to wait to find the first file in folder search (to take account of HDD spin up) diff --git a/syncplay/players/vlc.py b/syncplay/players/vlc.py index b491c39..f818d58 100644 --- a/syncplay/players/vlc.py +++ b/syncplay/players/vlc.py @@ -362,7 +362,7 @@ class VlcPlayer(BasePlayer): else: self.__process = subprocess.Popen(call, stderr=subprocess.PIPE, stdout=subprocess.PIPE) - if constants.VLC_LISTEN_FOR_STDOUT: + if self._shouldListenForSTDOUT(): for line in iter(self.__process.stderr.readline, ''): self.vlcHasResponded = True if "[syncplay]" in line: @@ -386,6 +386,12 @@ class VlcPlayer(BasePlayer): self.create_socket(socket.AF_INET, socket.SOCK_STREAM) self._sendingData = threading.Lock() + def _shouldListenForSTDOUT(self): + if sys.platform.startswith('win'): + return False # Due to VLC3 not using STDOUT/STDERR + else: + return True + def initiate_send(self): with self._sendingData: asynchat.async_chat.initiate_send(self) From 0f7709e7a45fbc03c446b72a79926818b3c98ffd Mon Sep 17 00:00:00 2001 From: Et0h Date: Fri, 30 Dec 2016 13:54:24 +0000 Subject: [PATCH 3/5] Reconnect to VLC during max_wait_time if connection failed --- syncplay/players/vlc.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/syncplay/players/vlc.py b/syncplay/players/vlc.py index f818d58..fa674d9 100644 --- a/syncplay/players/vlc.py +++ b/syncplay/players/vlc.py @@ -302,6 +302,7 @@ class VlcPlayer(BasePlayer): self.requestedVLCVersion = False self.vlcHasResponded = False self.oldIntfVersion = None + self.timeVLCLaunched = None call = [playerPath] if filePath: if utils.isASCII(filePath): @@ -362,9 +363,11 @@ class VlcPlayer(BasePlayer): else: self.__process = subprocess.Popen(call, stderr=subprocess.PIPE, stdout=subprocess.PIPE) + self.timeVLCLaunched = time.time() if self._shouldListenForSTDOUT(): for line in iter(self.__process.stderr.readline, ''): self.vlcHasResponded = True + self.timeVLCLaunched = None if "[syncplay]" in line: if "Listening on host" in line: break @@ -404,12 +407,16 @@ class VlcPlayer(BasePlayer): def handle_connect(self): asynchat.async_chat.handle_connect(self) self._vlcready.set() + self.timeVLCLaunched = None def collect_incoming_data(self, data): self._ibuffer.append(data) def handle_close(self): asynchat.async_chat.handle_close(self) + if self.timeVLCLaunched and time.time() - self.timeVLCLaunched > constants.VLC_OPEN_MAX_WAIT_TIME: + self.__playerController._client.ui.showDebugMessage("Failed to connect to VLC, but reconnecting as within max wait time") + self.run() if self.vlcHasResponded: self.__playerController.drop() else: @@ -427,7 +434,8 @@ class VlcPlayer(BasePlayer): self.sendLine("get-vlc-version") try: self.push(line + "\n") - self.__playerController._client.ui.showDebugMessage("player >> {}".format(line)) + if self.__playerController._client and self.__playerController._client.ui: + self.__playerController._client.ui.showDebugMessage("player >> {}".format(line)) except: pass if line == "close-vlc": From 772c4e5422b62ae4a380231df866c45d153d1e5f Mon Sep 17 00:00:00 2001 From: Et0h Date: Fri, 30 Dec 2016 17:01:59 +0000 Subject: [PATCH 4/5] Fix VLC reconnect --- syncplay/constants.py | 2 +- syncplay/players/vlc.py | 19 +++++++++++++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/syncplay/constants.py b/syncplay/constants.py index cd04f45..1898ce2 100644 --- a/syncplay/constants.py +++ b/syncplay/constants.py @@ -129,7 +129,7 @@ MPV_SENDMESSAGE_COOLDOWN_TIME = 0.05 MPV_MAX_NEWFILE_COOLDOWN_TIME = 3 STREAM_ADDITIONAL_IGNORE_TIME = 10 MPV_LOCK_WAIT_TIME = 0.05 -VLC_OPEN_MAX_WAIT_TIME = 15 +VLC_OPEN_MAX_WAIT_TIME = 20 VLC_MIN_PORT = 10000 VLC_MAX_PORT = 55000 diff --git a/syncplay/players/vlc.py b/syncplay/players/vlc.py index fa674d9..f3571ab 100644 --- a/syncplay/players/vlc.py +++ b/syncplay/players/vlc.py @@ -413,13 +413,18 @@ class VlcPlayer(BasePlayer): self._ibuffer.append(data) def handle_close(self): - asynchat.async_chat.handle_close(self) - if self.timeVLCLaunched and time.time() - self.timeVLCLaunched > constants.VLC_OPEN_MAX_WAIT_TIME: - self.__playerController._client.ui.showDebugMessage("Failed to connect to VLC, but reconnecting as within max wait time") + if self.timeVLCLaunched and time.time() - self.timeVLCLaunched < constants.VLC_OPEN_MAX_WAIT_TIME: + try: + self.__playerController._client.ui.showDebugMessage("Failed to connect to VLC, but reconnecting as within max wait time") + except: + pass self.run() - if self.vlcHasResponded: + elif self.vlcHasResponded: + asynchat.async_chat.handle_close(self) self.__playerController.drop() else: + self.vlcHasResponded = True + asynchat.async_chat.handle_close(self) self.__playerController.drop(getMessage("vlc-failed-connection").format(constants.VLC_MIN_VERSION)) def found_terminator(self): @@ -440,3 +445,9 @@ class VlcPlayer(BasePlayer): pass if line == "close-vlc": self._vlcclosed.set() + if not self.connected and not self.timeVLCLaunched: + # For circumstances where Syncplay is not connected to VLC and is not reconnecting + try: + self.__process.terminate() + except: # When VLC is already closed + pass \ No newline at end of file From de50cbf2f80d45c2a35652e322b408c5d198e47c Mon Sep 17 00:00:00 2001 From: Et0h Date: Fri, 30 Dec 2016 17:03:37 +0000 Subject: [PATCH 5/5] Upver to 38 --- syncplay/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syncplay/__init__.py b/syncplay/__init__.py index 1325692..ad1e46d 100644 --- a/syncplay/__init__.py +++ b/syncplay/__init__.py @@ -1,4 +1,4 @@ version = '1.4.0' milestone = 'Yoitsu' -release_number = '36' +release_number = '38' projectURL = 'http://syncplay.pl/'