Fixed mplayer/mpv pausing on the init
This commit is contained in:
parent
661d3926df
commit
0c7b26a2b6
@ -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')
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user