Merge 2afa2b39b3abc0ee8415359552b8db2b3e9ec376 into 661d3926dfec51c3356ed1c8295f3fa6572706cc
This commit is contained in:
commit
893e822472
@ -42,7 +42,7 @@ class SyncClientFactory(ClientFactory):
|
|||||||
|
|
||||||
def clientConnectionFailed(self, connector, reason):
|
def clientConnectionFailed(self, connector, reason):
|
||||||
if not self.reconnecting:
|
if not self.reconnecting:
|
||||||
self._client.ui.showErrorMessage(getMessage("en", "connection-failed-notification"))
|
self._client.stop(getMessage("en", "connection-failed-notification"))
|
||||||
else:
|
else:
|
||||||
self.clientConnectionLost(connector, reason)
|
self.clientConnectionLost(connector, reason)
|
||||||
|
|
||||||
@ -366,7 +366,8 @@ class SyncplayClient(object):
|
|||||||
reactor.connectTCP(host, port, self.protocolFactory)
|
reactor.connectTCP(host, port, self.protocolFactory)
|
||||||
reactor.run()
|
reactor.run()
|
||||||
|
|
||||||
def stop(self, promptForAction=False):
|
|
||||||
|
def stop(self, stopMessage=None):
|
||||||
if not self._running:
|
if not self._running:
|
||||||
return
|
return
|
||||||
self._running = False
|
self._running = False
|
||||||
@ -376,10 +377,12 @@ class SyncplayClient(object):
|
|||||||
if self._player:
|
if self._player:
|
||||||
self._player.drop()
|
self._player.drop()
|
||||||
if self.ui:
|
if self.ui:
|
||||||
|
if(stopMessage):
|
||||||
|
self.ui.showErrorMessage(stopMessage, True)
|
||||||
self.ui.drop()
|
self.ui.drop()
|
||||||
reactor.callLater(0.1, reactor.stop)
|
reactor.callLater(0.1, reactor.stop)
|
||||||
if(promptForAction):
|
if(stopMessage):
|
||||||
self.ui.promptFor(getMessage("en", "enter-to-exit-prompt"))
|
self.ui.waitForUserAction(getMessage("en", "enter-to-exit-prompt"))
|
||||||
|
|
||||||
class _WarningManager(object):
|
class _WarningManager(object):
|
||||||
def __init__(self, player, userlist, ui):
|
def __init__(self, player, userlist, ui):
|
||||||
@ -596,8 +599,8 @@ class UiManager(object):
|
|||||||
def showErrorMessage(self, message, criticalerror=False):
|
def showErrorMessage(self, message, criticalerror=False):
|
||||||
self.__ui.showErrorMessage(message, criticalerror)
|
self.__ui.showErrorMessage(message, criticalerror)
|
||||||
|
|
||||||
def promptFor(self, prompt):
|
def waitForUserAction(self, prompt):
|
||||||
return self.__ui.promptFor(prompt)
|
return self.__ui.waitForUserAction(prompt)
|
||||||
|
|
||||||
def userListChange(self):
|
def userListChange(self):
|
||||||
self.__ui.userListChange()
|
self.__ui.userListChange()
|
||||||
|
|||||||
@ -311,7 +311,7 @@ class MPCHCAPIPlayer(BasePlayer):
|
|||||||
self.__client = client
|
self.__client = client
|
||||||
self._mpcApi = MpcHcApi()
|
self._mpcApi = MpcHcApi()
|
||||||
self._mpcApi.callbacks.onUpdateFilename = lambda _: self.__makePing()
|
self._mpcApi.callbacks.onUpdateFilename = lambda _: self.__makePing()
|
||||||
self._mpcApi.callbacks.onMpcClosed = lambda _: self.reactor.callFromThread(self.__client.stop, (False),)
|
self._mpcApi.callbacks.onMpcClosed = lambda _: self.reactor.callFromThread(self.__client.stop,)
|
||||||
self._mpcApi.callbacks.onFileStateChange = lambda _: self.__lockAsking()
|
self._mpcApi.callbacks.onFileStateChange = lambda _: self.__lockAsking()
|
||||||
self._mpcApi.callbacks.onUpdatePlaystate = lambda _: self.__unlockAsking()
|
self._mpcApi.callbacks.onUpdatePlaystate = lambda _: self.__unlockAsking()
|
||||||
self._mpcApi.callbacks.onGetCurrentPosition = lambda _: self.__onGetPosition()
|
self._mpcApi.callbacks.onGetCurrentPosition = lambda _: self.__onGetPosition()
|
||||||
@ -356,8 +356,7 @@ class MPCHCAPIPlayer(BasePlayer):
|
|||||||
def __dropIfNotSufficientVersion(self):
|
def __dropIfNotSufficientVersion(self):
|
||||||
self._mpcApi.askForVersion()
|
self._mpcApi.askForVersion()
|
||||||
if(not self.__versionUpdate.wait(0.1) or not self._mpcApi.version):
|
if(not self.__versionUpdate.wait(0.1) or not self._mpcApi.version):
|
||||||
self.__mpcError(getMessage("en", "mpc-version-insufficient-error").format(constants.MPC_MIN_VER))
|
self.reactor.callFromThread(self.__client.stop, getMessage("en", "mpc-version-insufficient-error").format(constants.MPC_MIN_VER),)
|
||||||
self.reactor.callFromThread(self.__client.stop, (True),)
|
|
||||||
|
|
||||||
def __testMpcReady(self):
|
def __testMpcReady(self):
|
||||||
if(not self.__preventAsking.wait(10)):
|
if(not self.__preventAsking.wait(10)):
|
||||||
@ -370,8 +369,7 @@ class MPCHCAPIPlayer(BasePlayer):
|
|||||||
self.__handleUpdatedFilename()
|
self.__handleUpdatedFilename()
|
||||||
self.askForStatus()
|
self.askForStatus()
|
||||||
except Exception, err:
|
except Exception, err:
|
||||||
self.__client.ui.showErrorMessage(err.message)
|
self.reactor.callFromThread(self.__client.stop, err.message,)
|
||||||
self.reactor.callFromThread(self.__client.stop)
|
|
||||||
|
|
||||||
def initPlayer(self, filePath):
|
def initPlayer(self, filePath):
|
||||||
self.__dropIfNotSufficientVersion()
|
self.__dropIfNotSufficientVersion()
|
||||||
@ -456,10 +454,6 @@ class MPCHCAPIPlayer(BasePlayer):
|
|||||||
self.__setUpStateForNewlyOpenedFile()
|
self.__setUpStateForNewlyOpenedFile()
|
||||||
args = (self._mpcApi.filePlaying, self._mpcApi.fileDuration, self._mpcApi.filePath)
|
args = (self._mpcApi.filePlaying, self._mpcApi.fileDuration, self._mpcApi.filePath)
|
||||||
self.reactor.callFromThread(self.__client.updateFile, *args)
|
self.reactor.callFromThread(self.__client.updateFile, *args)
|
||||||
|
|
||||||
def __mpcError(self, err=""):
|
|
||||||
self.__client.ui.showErrorMessage(err)
|
|
||||||
self.reactor.callFromThread(self.__client.stop)
|
|
||||||
|
|
||||||
def sendCustomCommand(self, cmd, val):
|
def sendCustomCommand(self, cmd, val):
|
||||||
self._mpcApi.sendRawCommand(cmd, val)
|
self._mpcApi.sendRawCommand(cmd, val)
|
||||||
|
|||||||
@ -21,9 +21,7 @@ class MplayerPlayer(BasePlayer):
|
|||||||
try:
|
try:
|
||||||
self._listener = self.__Listener(self, playerPath, filePath, args)
|
self._listener = self.__Listener(self, playerPath, filePath, args)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
self._client.ui.showMessage(getMessage("en", "mplayer-file-required-notification"))
|
self.reactor.callFromThread(self._client.stop,getMessage("en", "mplayer-file-required-notification")+"\n"+getMessage("en", "mplayer-file-required-notification/example"),)
|
||||||
self._client.ui.showMessage(getMessage("en", "mplayer-file-required-notification/example"))
|
|
||||||
self.reactor.callFromThread(self._client.stop, (True),)
|
|
||||||
return
|
return
|
||||||
self._listener.setDaemon(True)
|
self._listener.setDaemon(True)
|
||||||
self._listener.start()
|
self._listener.start()
|
||||||
@ -181,9 +179,8 @@ class MplayerPlayer(BasePlayer):
|
|||||||
return path
|
return path
|
||||||
|
|
||||||
def notMplayer2(self):
|
def notMplayer2(self):
|
||||||
print getMessage("en", "mplayer2-required")
|
|
||||||
self._listener.sendLine('quit')
|
self._listener.sendLine('quit')
|
||||||
self.reactor.callFromThread(self._client.stop, (True),)
|
self.reactor.callFromThread(self._client.stop, getMessage("en", "mplayer2-required"),)
|
||||||
|
|
||||||
def _takeLocksDown(self):
|
def _takeLocksDown(self):
|
||||||
self._durationAsk.set()
|
self._durationAsk.set()
|
||||||
@ -195,7 +192,7 @@ class MplayerPlayer(BasePlayer):
|
|||||||
def drop(self):
|
def drop(self):
|
||||||
self._listener.sendLine('quit')
|
self._listener.sendLine('quit')
|
||||||
self._takeLocksDown()
|
self._takeLocksDown()
|
||||||
self.reactor.callFromThread(self._client.stop, (False),)
|
self.reactor.callFromThread(self._client.stop,)
|
||||||
|
|
||||||
class __Listener(threading.Thread):
|
class __Listener(threading.Thread):
|
||||||
def __init__(self, playerController, playerPath, filePath, args):
|
def __init__(self, playerController, playerPath, filePath, args):
|
||||||
|
|||||||
@ -40,15 +40,13 @@ class VlcPlayer(BasePlayer):
|
|||||||
try:
|
try:
|
||||||
self._listener = self.__Listener(self, playerPath, filePath, args, self._vlcready, self._vlcclosed)
|
self._listener = self.__Listener(self, playerPath, filePath, args, self._vlcready, self._vlcclosed)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
self._client.ui.showErrorMessage(getMessage("en", "vlc-failed-connection"), True)
|
self.reactor.callFromThread(self._client.stop, getMessage("en", "vlc-failed-connection"),)
|
||||||
self.reactor.callFromThread(self._client.stop, (True),)
|
|
||||||
return
|
return
|
||||||
self._listener.setDaemon(True)
|
self._listener.setDaemon(True)
|
||||||
self._listener.start()
|
self._listener.start()
|
||||||
if(not self._vlcready.wait(constants.VLC_OPEN_MAX_WAIT_TIME)):
|
if(not self._vlcready.wait(constants.VLC_OPEN_MAX_WAIT_TIME)):
|
||||||
self._vlcready.set()
|
self._vlcready.set()
|
||||||
self._client.ui.showErrorMessage(getMessage("en", "vlc-failed-connection"), True)
|
self.reactor.callFromThread(self._client.stop, getMessage("en", "vlc-failed-connection"),)
|
||||||
self.reactor.callFromThread(self._client.stop, (True),)
|
|
||||||
self.reactor.callFromThread(self._client.initPlayer, (self),)
|
self.reactor.callFromThread(self._client.initPlayer, (self),)
|
||||||
|
|
||||||
def _fileUpdateClearEvents(self):
|
def _fileUpdateClearEvents(self):
|
||||||
@ -204,7 +202,7 @@ class VlcPlayer(BasePlayer):
|
|||||||
self._positionAsk.set()
|
self._positionAsk.set()
|
||||||
self._vlcready.set()
|
self._vlcready.set()
|
||||||
self._pausedAsk.set()
|
self._pausedAsk.set()
|
||||||
self.reactor.callFromThread(self._client.stop, (False),)
|
self.reactor.callFromThread(self._client.stop,)
|
||||||
|
|
||||||
class __Listener(threading.Thread, asynchat.async_chat):
|
class __Listener(threading.Thread, asynchat.async_chat):
|
||||||
def __init__(self, playerController, playerPath, filePath, args, vlcReady, vlcClosed):
|
def __init__(self, playerController, playerPath, filePath, args, vlcReady, vlcClosed):
|
||||||
|
|||||||
@ -67,9 +67,9 @@ class SyncClientProtocol(JSONCommandProtocol):
|
|||||||
self._client.destroyProtocol()
|
self._client.destroyProtocol()
|
||||||
|
|
||||||
def dropWithError(self, error):
|
def dropWithError(self, error):
|
||||||
self._client.ui.showErrorMessage(error)
|
|
||||||
self._client.protocolFactory.stopRetrying()
|
self._client.protocolFactory.stopRetrying()
|
||||||
self.drop()
|
self.drop()
|
||||||
|
self._client.stop(error)
|
||||||
|
|
||||||
def _extractHelloArguments(self, hello):
|
def _extractHelloArguments(self, hello):
|
||||||
username = hello["username"] if hello.has_key("username") else None
|
username = hello["username"] if hello.has_key("username") else None
|
||||||
|
|||||||
@ -36,7 +36,7 @@ class ConsoleUI(threading.Thread):
|
|||||||
except EOFError:
|
except EOFError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def promptFor(self, prompt=">", message=""):
|
def waitForUserAction(self, prompt=">", message=""):
|
||||||
if message <> "":
|
if message <> "":
|
||||||
print(message)
|
print(message)
|
||||||
self.promptMode.clear()
|
self.promptMode.clear()
|
||||||
|
|||||||
@ -12,8 +12,7 @@ class MainWindow(QtGui.QMainWindow):
|
|||||||
self._syncplayClient = client
|
self._syncplayClient = client
|
||||||
self.roomInput.setText(self._syncplayClient.getRoom())
|
self.roomInput.setText(self._syncplayClient.getRoom())
|
||||||
|
|
||||||
def promptFor(self, prompt=">", message=""):
|
def waitForUserAction(self, prompt=">", message=""):
|
||||||
#TODO: Prompt user
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def showMessage(self, message, noTimestamp=False):
|
def showMessage(self, message, noTimestamp=False):
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user