From f86f55a3007529fb71835546b2933f33c7e78922 Mon Sep 17 00:00:00 2001 From: daniel-123 Date: Mon, 28 Jan 2013 23:16:43 +0100 Subject: [PATCH] Proper version checking for MPlayer. --- syncplay/client.py | 3 +++ syncplay/constants.py | 2 +- syncplay/messages.py | 1 + syncplay/players/mplayer.py | 47 ++++++++++++++++++++++--------------- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/syncplay/client.py b/syncplay/client.py index 5406b81..ec33cb1 100644 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -273,6 +273,8 @@ class SyncplayClient(object): return self._globalPaused def updateFile(self, filename, duration, path): + if not path: + return size = os.path.getsize(path) self.userlist.currentUser.setFile(filename, duration, size) self.sendFile() @@ -584,3 +586,4 @@ class UiManager(object): def promptFor(self, prompt): return self.__ui.promptFor(prompt) + diff --git a/syncplay/constants.py b/syncplay/constants.py index f28a14c..0443148 100644 --- a/syncplay/constants.py +++ b/syncplay/constants.py @@ -57,7 +57,7 @@ VLC_OPEN_MAX_WAIT_TIME = 10 VLC_SOCKET_OPEN_WAIT_TIME = 0.5 #These are not changes you're looking for -MPLAYER_SLAVE_ARGS = [ '-slave', '-nomsgcolor', '-msglevel', 'all=1:global=4'] +MPLAYER_SLAVE_ARGS = [ '-slave', '-nomsgcolor', '-msglevel', 'all=1:global=4:cplayer=4'] MPV_SLAVE_ARGS = [ '--slave-broken', '-msglevel', 'all=1:global=4'] MPLAYER_ANSWER_REGEX = "^ANS_([a-zA-Z_]+)=(.+)$" UI_COMMAND_REGEX = r"^(?P[^\ ]+)(?:\ (?P.+))?" diff --git a/syncplay/messages.py b/syncplay/messages.py index f008e2d..2b66e6b 100644 --- a/syncplay/messages.py +++ b/syncplay/messages.py @@ -37,6 +37,7 @@ en = { "mplayer-file-required-notification" : "Syncplay using mplayer requires you to provide file when starting", "mplayer-file-required-notification/example" : "Usage example: syncplay [options] [url|path/]filename", + "mplayer2-required" : "Syncplay is incompatible with MPlayer 1.x, please use mplayer2", "unrecognized-command-notification" : "Unrecognized command", "commandlist-notification" : "Available commands:", diff --git a/syncplay/players/mplayer.py b/syncplay/players/mplayer.py index 27ca95b..2354cb8 100644 --- a/syncplay/players/mplayer.py +++ b/syncplay/players/mplayer.py @@ -32,19 +32,19 @@ class MplayerPlayer(BasePlayer): self._positionAsk = threading.Event() self._pausedAsk = threading.Event() - + self._preparePlayer() - + def _fileUpdateClearEvents(self): self._durationAsk.clear() self._filenameAsk.clear() self._pathAsk.clear() - + def _fileUpdateWaitEvents(self): self._durationAsk.wait() self._filenameAsk.wait() self._pathAsk.wait() - + def _onFileUpdate(self): self._fileUpdateClearEvents() self._getFilename() @@ -52,7 +52,7 @@ class MplayerPlayer(BasePlayer): self._getFilepath() self._fileUpdateWaitEvents() self._client.updateFile(self._filename, self._duration, self._filepath) - + def _preparePlayer(self): self.setPaused(self._client.getGlobalPaused()) self.setPosition(self._client.getGlobalPosition()) @@ -76,10 +76,10 @@ class MplayerPlayer(BasePlayer): def displayMessage(self, message, duration = (constants.OSD_DURATION*1000)): self._listener.sendLine('osd_show_text "{!s}" {} {}'.format(message, duration, constants.MPLAYER_OSD_LEVEL)) - + def setSpeed(self, value): self._setProperty('speed', "{:.2f}".format(value)) - + def setPosition(self, value): self._position = value self._setProperty('time_pos', "{}".format(value)) @@ -90,16 +90,16 @@ class MplayerPlayer(BasePlayer): def _getFilename(self): self._getProperty('filename') - + def _getLength(self): self._getProperty('length') - + def _getFilepath(self): self._getProperty('path') - + def _getPaused(self): self._getProperty('pause') - + def _getPosition(self): self._getProperty('time_pos') @@ -124,7 +124,7 @@ class MplayerPlayer(BasePlayer): elif(name == "filename"): self._filename = value self._filenameAsk.set() - + @staticmethod def run(client, playerPath, filePath, args): mplayer = MplayerPlayer(client, MplayerPlayer.getExpandedPath(playerPath), filePath, args) @@ -153,37 +153,46 @@ class MplayerPlayer(BasePlayer): path = os.path.join(os.path.realpath(path), playerPath) if os.access(path, os.X_OK): return path - - def drop(self): + + def notMplayer2(self): + print getMessage("en", "mplayer2-required") self._listener.sendLine('quit') + self._client.stop(True) + + def _takeLocksDown(self): self._durationAsk.set() self._filenameAsk.set() self._pathAsk.set() self._positionAsk.set() self._pausedAsk.set() + + def drop(self): + self._listener.sendLine('quit') + self._takeLocksDown() self._client.stop(False) - for line in self._listener.readStderrLine(): - self._client.ui.showMessage(line, True, True) class __Listener(threading.Thread): def __init__(self, playerController, playerPath, filePath, args): self.__playerController = playerController if(not filePath): - raise ValueError + raise ValueError() call = [playerPath, filePath] call.extend(playerController.SLAVE_ARGS) if(args): call.extend(args) self.__process = subprocess.Popen(call, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) threading.Thread.__init__(self, name="MPlayer Listener") - + def run(self): + line = self.__process.stdout.readline() + if("MPlayer2" not in line): + self.__playerController.notMplayer2() while(self.__process.poll() is None): line = self.__process.stdout.readline() line = line.rstrip("\r\n") self.__playerController.lineReceived(line) self.__playerController.drop() - + def sendLine(self, line): try: self.__process.stdin.write(line + "\n")