Proper version checking for MPlayer.
This commit is contained in:
parent
4ca88ddd02
commit
f86f55a300
@ -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)
|
||||
|
||||
|
||||
|
||||
@ -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<command>[^\ ]+)(?:\ (?P<parameter>.+))?"
|
||||
|
||||
@ -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:",
|
||||
|
||||
@ -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")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user