From 952cc60898200027a66677ebd74ece414c3400ef Mon Sep 17 00:00:00 2001 From: Alberto Sottile Date: Tue, 28 May 2019 22:36:49 +0200 Subject: [PATCH] Fix QSocketNotifier issue with qt5reactor Sending the call to transport.write wrapped in a self.reactor.callFromThread instead of directly does the trick. Include also fixes to allow correct quit of VLC and Syncplay when either one is closed. Known issues: there is a noticeable lag (~ 1 second) between the start of Syncplay MainWindow and the start of VLC. --- syncplay/players/vlc.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/syncplay/players/vlc.py b/syncplay/players/vlc.py index a86dd72..3487bb1 100755 --- a/syncplay/players/vlc.py +++ b/syncplay/players/vlc.py @@ -39,14 +39,6 @@ class VLCProtocol(LineReceiver): self.factory._playerController._client.ui.showDebugMessage("player >> {}".format(line)) # except: # pass - if line == "close-vlc": - self.factory._playerController._vlcclosed.set() - if not self.factory.connected and not self.factory.timeVLCLaunched: - # For circumstances where Syncplay is not connected to VLC and is not reconnecting - #try: - self.factory._process.terminate() - #except: # When VLC is already closed - # pass def connectionMade(self): self.factory.connected = True @@ -86,6 +78,15 @@ class VLCClientFactory(ClientFactory): self.vlcHasResponded = True self._playerController.drop(getMessage("vlc-failed-connection").format(constants.VLC_MIN_VERSION)) + def closeVLC(self): + self._playerController._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 + class VlcPlayer(BasePlayer): speedSupported = True @@ -379,7 +380,7 @@ class VlcPlayer(BasePlayer): def drop(self, dropErrorMessage=None): if self._listener: self._vlcclosed.clear() - self._listener.sendLine('close-vlc') + self._listener._factory.closeVLC() self._vlcclosed.wait() self._durationAsk.set() self._filenameAsk.set() @@ -533,4 +534,4 @@ class VlcPlayer(BasePlayer): out.close() def sendLine(self, line): - self._factory.protocol.sendLine(line) \ No newline at end of file + self.reactor.callFromThread(self._factory.protocol.sendLine, line) \ No newline at end of file