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.
This commit is contained in:
Alberto Sottile 2019-05-28 22:36:49 +02:00
parent bb494a291b
commit 952cc60898

View File

@ -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)
self.reactor.callFromThread(self._factory.protocol.sendLine, line)