Fixed mplayer/mpv pausing on the init

This commit is contained in:
Uriziel 2014-03-30 21:48:11 +02:00
parent 661d3926df
commit 0c7b26a2b6

View File

@ -24,29 +24,29 @@ class MplayerPlayer(BasePlayer):
self._client.ui.showMessage(getMessage("en", "mplayer-file-required-notification")) self._client.ui.showMessage(getMessage("en", "mplayer-file-required-notification"))
self._client.ui.showMessage(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),) self.reactor.callFromThread(self._client.stop, (True),)
return return
self._listener.setDaemon(True) self._listener.setDaemon(True)
self._listener.start() self._listener.start()
self._durationAsk = threading.Event() self._durationAsk = threading.Event()
self._filenameAsk = threading.Event() self._filenameAsk = threading.Event()
self._pathAsk = threading.Event() self._pathAsk = threading.Event()
self._positionAsk = threading.Event() self._positionAsk = threading.Event()
self._pausedAsk = threading.Event() self._pausedAsk = threading.Event()
self._preparePlayer() self._preparePlayer()
def _fileUpdateClearEvents(self): def _fileUpdateClearEvents(self):
self._durationAsk.clear() self._durationAsk.clear()
self._filenameAsk.clear() self._filenameAsk.clear()
self._pathAsk.clear() self._pathAsk.clear()
def _fileUpdateWaitEvents(self): def _fileUpdateWaitEvents(self):
self._durationAsk.wait() self._durationAsk.wait()
self._filenameAsk.wait() self._filenameAsk.wait()
self._pathAsk.wait() self._pathAsk.wait()
def _onFileUpdate(self): def _onFileUpdate(self):
self._fileUpdateClearEvents() self._fileUpdateClearEvents()
self._getFilename() self._getFilename()
@ -54,13 +54,11 @@ class MplayerPlayer(BasePlayer):
self._getFilepath() self._getFilepath()
self._fileUpdateWaitEvents() self._fileUpdateWaitEvents()
self._client.updateFile(self._filename, self._duration, self._filepath) self._client.updateFile(self._filename, self._duration, self._filepath)
def _preparePlayer(self): def _preparePlayer(self):
self.setPaused(self._client.getGlobalPaused())
self.setPosition(self._client.getGlobalPosition())
self.reactor.callFromThread(self._client.initPlayer, (self),) self.reactor.callFromThread(self._client.initPlayer, (self),)
self._onFileUpdate() self._onFileUpdate()
def askForStatus(self): def askForStatus(self):
self._positionAsk.clear() self._positionAsk.clear()
self._pausedAsk.clear() self._pausedAsk.clear()
@ -69,61 +67,61 @@ class MplayerPlayer(BasePlayer):
self._positionAsk.wait() self._positionAsk.wait()
self._pausedAsk.wait() self._pausedAsk.wait()
self._client.updatePlayerStatus(self._paused, self._position) self._client.updatePlayerStatus(self._paused, self._position)
def _setProperty(self, property_, value): def _setProperty(self, property_, value):
self._listener.sendLine("set_property {} {}".format(property_, value)) self._listener.sendLine("set_property {} {}".format(property_, value))
def _getProperty(self, property_): def _getProperty(self, property_):
self._listener.sendLine("get_property {}".format(property_)) self._listener.sendLine("get_property {}".format(property_))
def displayMessage(self, message, duration = (constants.OSD_DURATION*1000)): def displayMessage(self, message, duration=(constants.OSD_DURATION * 1000)):
self._listener.sendLine(u'osd_show_text "{!s}" {} {}'.format(message, duration, constants.MPLAYER_OSD_LEVEL).encode('utf-8')) self._listener.sendLine(u'osd_show_text "{!s}" {} {}'.format(message, duration, constants.MPLAYER_OSD_LEVEL).encode('utf-8'))
def setSpeed(self, value): def setSpeed(self, value):
self._setProperty('speed', "{:.2f}".format(value)) self._setProperty('speed', "{:.2f}".format(value))
def openFile(self, filePath): def openFile(self, filePath):
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath))) self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath)))
self._onFileUpdate() self._onFileUpdate()
if self._client.getGlobalPaused(): if self._client.getGlobalPaused():
self._listener.sendLine('pause') self._listener.sendLine('pause')
self.setPosition(self._client.getGlobalPosition()) self.setPosition(self._client.getGlobalPosition())
def setPosition(self, value): def setPosition(self, value):
self._position = value self._position = value
self._setProperty('time_pos', "{}".format(value)) self._setProperty('time_pos', "{}".format(value))
def setPaused(self, value): def setPaused(self, value):
if self._paused <> value: if self._paused <> value:
self._listener.sendLine('pause') self._listener.sendLine('pause')
def _getFilename(self): def _getFilename(self):
self._getProperty('filename') self._getProperty('filename')
def _getLength(self): def _getLength(self):
self._getProperty('length') self._getProperty('length')
def _getFilepath(self): def _getFilepath(self):
self._getProperty('path') self._getProperty('path')
def _getPaused(self): def _getPaused(self):
self._getProperty('pause') self._getProperty('pause')
def _getPosition(self): def _getPosition(self):
self._getProperty('time_pos') self._getProperty('time_pos')
def _quoteArg(self, arg): def _quoteArg(self, arg):
arg = arg.replace('\\', '\\\\') arg = arg.replace('\\', '\\\\')
arg = arg.replace("'", "\\'") arg = arg.replace("'", "\\'")
arg = arg.replace('"', '\\"') arg = arg.replace('"', '\\"')
return u'"{}"'.format(arg) return u'"{}"'.format(arg)
def lineReceived(self, line): def lineReceived(self, line):
match = self.RE_ANSWER.match(line) match = self.RE_ANSWER.match(line)
if not match: if not match:
return return
name, value = match.group(1).lower(), match.group(2) name, value = match.group(1).lower(), match.group(2)
if(name == "time_pos"): if(name == "time_pos"):
self._position = float(value) self._position = float(value)
self._positionAsk.set() self._positionAsk.set()
@ -139,31 +137,31 @@ class MplayerPlayer(BasePlayer):
elif(name == "filename"): elif(name == "filename"):
self._filename = value.decode('utf-8') self._filename = value.decode('utf-8')
self._filenameAsk.set() self._filenameAsk.set()
@staticmethod @staticmethod
def run(client, playerPath, filePath, args): def run(client, playerPath, filePath, args):
mplayer = MplayerPlayer(client, MplayerPlayer.getExpandedPath(playerPath), filePath, args) mplayer = MplayerPlayer(client, MplayerPlayer.getExpandedPath(playerPath), filePath, args)
return mplayer return mplayer
@staticmethod @staticmethod
def getDefaultPlayerPathsList(): def getDefaultPlayerPathsList():
l = [] l = []
for path in constants.MPLAYER_PATHS: for path in constants.MPLAYER_PATHS:
p = MplayerPlayer.getExpandedPath(path) p = MplayerPlayer.getExpandedPath(path)
if p: if p:
l.append(p) l.append(p)
return l return l
@staticmethod @staticmethod
def getIconPath(path): def getIconPath(path):
return constants.MPLAYER_ICONPATH return constants.MPLAYER_ICONPATH
@staticmethod @staticmethod
def isValidPlayerPath(path): def isValidPlayerPath(path):
if("mplayer" in path and MplayerPlayer.getExpandedPath(path)): if("mplayer" in path and MplayerPlayer.getExpandedPath(path)):
return True return True
return False return False
@staticmethod @staticmethod
def getExpandedPath(playerPath): def getExpandedPath(playerPath):
if not os.path.isfile(playerPath): if not os.path.isfile(playerPath):
@ -179,24 +177,24 @@ class MplayerPlayer(BasePlayer):
path = os.path.join(os.path.realpath(path), playerPath) path = os.path.join(os.path.realpath(path), playerPath)
if os.access(path, os.X_OK): if os.access(path, os.X_OK):
return path return path
def notMplayer2(self): def notMplayer2(self):
print getMessage("en", "mplayer2-required") 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, (True),)
def _takeLocksDown(self): def _takeLocksDown(self):
self._durationAsk.set() self._durationAsk.set()
self._filenameAsk.set() self._filenameAsk.set()
self._pathAsk.set() self._pathAsk.set()
self._positionAsk.set() self._positionAsk.set()
self._pausedAsk.set() self._pausedAsk.set()
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, (False),)
class __Listener(threading.Thread): class __Listener(threading.Thread):
def __init__(self, playerController, playerPath, filePath, args): def __init__(self, playerController, playerPath, filePath, args):
self.__playerController = playerController self.__playerController = playerController
@ -243,7 +241,7 @@ class MplayerPlayer(BasePlayer):
line = line.rstrip("\r\n") line = line.rstrip("\r\n")
self.__playerController.lineReceived(line) self.__playerController.lineReceived(line)
self.__playerController.drop() self.__playerController.drop()
def sendLine(self, line): def sendLine(self, line):
try: try:
line = (line.decode('utf8') + u"\n").encode('utf8') line = (line.decode('utf8') + u"\n").encode('utf8')