Queue/drop messages sent while mpv is loading a file & throttle mpv message sending (+ revert problematic unicode)
This commit is contained in:
parent
e71de798e9
commit
28eb7a0561
@ -1,4 +1,4 @@
|
|||||||
version = '1.4.0'
|
version = '1.4.0'
|
||||||
milestone = 'Yoitsu'
|
milestone = 'Yoitsu'
|
||||||
release_number = '24'
|
release_number = '25'
|
||||||
projectURL = 'http://syncplay.pl/'
|
projectURL = 'http://syncplay.pl/'
|
||||||
|
|||||||
@ -1280,7 +1280,7 @@ class UiManager(object):
|
|||||||
|
|
||||||
def showDebugMessage(self, message):
|
def showDebugMessage(self, message):
|
||||||
if constants.DEBUG_MODE and message.rstrip():
|
if constants.DEBUG_MODE and message.rstrip():
|
||||||
sys.stderr.write(u"{}{}\n".format(time.strftime(constants.UI_TIME_FORMAT, time.localtime()),message.rstrip()))
|
sys.stderr.write("{}{}\n".format(time.strftime(constants.UI_TIME_FORMAT, time.localtime()),message.rstrip()))
|
||||||
|
|
||||||
def showMessage(self, message, noPlayer=False, noTimestamp=False, secondaryOSD=False):
|
def showMessage(self, message, noPlayer=False, noTimestamp=False, secondaryOSD=False):
|
||||||
if not noPlayer: self.showOSDMessage(message, duration=constants.OSD_DURATION, secondaryOSD=secondaryOSD)
|
if not noPlayer: self.showOSDMessage(message, duration=constants.OSD_DURATION, secondaryOSD=secondaryOSD)
|
||||||
|
|||||||
@ -121,6 +121,8 @@ MPC_RETRY_WAIT_TIME = 0.01
|
|||||||
MPC_MAX_RETRIES = 30
|
MPC_MAX_RETRIES = 30
|
||||||
MPC_PAUSE_TOGGLE_DELAY = 0.05
|
MPC_PAUSE_TOGGLE_DELAY = 0.05
|
||||||
MPV_NEWFILE_IGNORE_TIME = 1
|
MPV_NEWFILE_IGNORE_TIME = 1
|
||||||
|
MPV_SENDMESSAGE_COOLDOWN_TIME = 0.05
|
||||||
|
MPV_MAX_NEWFILE_COOLDOWN_TIME = 3
|
||||||
STREAM_ADDITIONAL_IGNORE_TIME = 10
|
STREAM_ADDITIONAL_IGNORE_TIME = 10
|
||||||
MPV_LOCK_WAIT_TIME = 0.05
|
MPV_LOCK_WAIT_TIME = 0.05
|
||||||
VLC_OPEN_MAX_WAIT_TIME = 15
|
VLC_OPEN_MAX_WAIT_TIME = 15
|
||||||
|
|||||||
@ -266,6 +266,10 @@ class MplayerPlayer(BasePlayer):
|
|||||||
|
|
||||||
class __Listener(threading.Thread):
|
class __Listener(threading.Thread):
|
||||||
def __init__(self, playerController, playerPath, filePath, args):
|
def __init__(self, playerController, playerPath, filePath, args):
|
||||||
|
self.sendQueue = []
|
||||||
|
self.readyToSend = True
|
||||||
|
self.lastSendTime = None
|
||||||
|
self.lastNotReadyTime = None
|
||||||
self.__playerController = playerController
|
self.__playerController = playerController
|
||||||
if self.__playerController.getPlayerPathErrors(playerPath,filePath):
|
if self.__playerController.getPlayerPathErrors(playerPath,filePath):
|
||||||
raise ValueError()
|
raise ValueError()
|
||||||
@ -322,12 +326,54 @@ class MplayerPlayer(BasePlayer):
|
|||||||
self.__playerController.lineReceived(line)
|
self.__playerController.lineReceived(line)
|
||||||
self.__playerController.drop()
|
self.__playerController.drop()
|
||||||
|
|
||||||
def sendLine(self, line):
|
def isReadyForSend(self):
|
||||||
|
self.checkForReadinessOverride()
|
||||||
|
return self.readyToSend
|
||||||
|
|
||||||
|
def setReadyToSend(self, newReadyState):
|
||||||
|
oldState = self.readyToSend
|
||||||
|
self.readyToSend = newReadyState
|
||||||
|
self.lastNotReadyTime = time.time() if newReadyState == False else None
|
||||||
|
if self.readyToSend == True:
|
||||||
|
self.__playerController._client.ui.showDebugMessage("<mpv> Ready to send: True")
|
||||||
|
else:
|
||||||
|
self.__playerController._client.ui.showDebugMessage("<mpv> Ready to send: False")
|
||||||
|
if self.readyToSend == True and oldState == False:
|
||||||
|
self.processSendQueue()
|
||||||
|
|
||||||
|
def checkForReadinessOverride(self):
|
||||||
|
if self.lastNotReadyTime and time.time() - self.lastNotReadyTime > constants.MPV_MAX_NEWFILE_COOLDOWN_TIME:
|
||||||
|
self.setReadyToSend(True)
|
||||||
|
|
||||||
|
def sendLine(self, line, notReadyAfterThis=None):
|
||||||
|
self.checkForReadinessOverride()
|
||||||
|
if self.readyToSend == False and "print_text ANS_pause" in line:
|
||||||
|
self.__playerController._client.ui.showDebugMessage("<mpv> Not ready to get status update, so skipping")
|
||||||
|
return
|
||||||
|
self.sendQueue.append(line)
|
||||||
|
self.processSendQueue()
|
||||||
|
if notReadyAfterThis:
|
||||||
|
self.setReadyToSend(False)
|
||||||
|
|
||||||
|
def processSendQueue(self):
|
||||||
|
while self.sendQueue and self.readyToSend:
|
||||||
|
if self.lastSendTime and time.time() - self.lastSendTime < constants.MPV_SENDMESSAGE_COOLDOWN_TIME:
|
||||||
|
self.__playerController._client.ui.showDebugMessage("<mpv> Throttling message send, so sleeping for {}".format(constants.MPV_SENDMESSAGE_COOLDOWN_TIME))
|
||||||
|
time.sleep(constants.MPV_SENDMESSAGE_COOLDOWN_TIME)
|
||||||
|
try:
|
||||||
|
lineToSend = self.sendQueue.pop()
|
||||||
|
if lineToSend:
|
||||||
|
self.lastSendTime = time.time()
|
||||||
|
self.actuallySendLine(lineToSend)
|
||||||
|
except IndexError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def actuallySendLine(self, line):
|
||||||
try:
|
try:
|
||||||
if not isinstance(line, unicode):
|
if not isinstance(line, unicode):
|
||||||
line = line.decode('utf8')
|
line = line.decode('utf8')
|
||||||
line = (line + u"\n").encode('utf8')
|
line = (line + u"\n").encode('utf8')
|
||||||
self.__playerController._client.ui.showDebugMessage(u"player >> {}".format(line))
|
self.__playerController._client.ui.showDebugMessage("player >> {}".format(line))
|
||||||
self.__process.stdin.write(line)
|
self.__process.stdin.write(line)
|
||||||
except IOError:
|
except IOError:
|
||||||
pass
|
pass
|
||||||
|
|||||||
@ -163,6 +163,10 @@ class NewMpvPlayer(OldMpvPlayer):
|
|||||||
def askForStatus(self):
|
def askForStatus(self):
|
||||||
self._positionAsk.clear()
|
self._positionAsk.clear()
|
||||||
self._pausedAsk.clear()
|
self._pausedAsk.clear()
|
||||||
|
if not self._listener.isReadyForSend:
|
||||||
|
self._client.ui.showDebugMessage("mpv not ready for update")
|
||||||
|
return
|
||||||
|
|
||||||
self._getPausedAndPosition()
|
self._getPausedAndPosition()
|
||||||
self._positionAsk.wait(constants.MPV_LOCK_WAIT_TIME)
|
self._positionAsk.wait(constants.MPV_LOCK_WAIT_TIME)
|
||||||
self._pausedAsk.wait(constants.MPV_LOCK_WAIT_TIME)
|
self._pausedAsk.wait(constants.MPV_LOCK_WAIT_TIME)
|
||||||
@ -183,7 +187,7 @@ class NewMpvPlayer(OldMpvPlayer):
|
|||||||
|
|
||||||
def _loadFile(self, filePath):
|
def _loadFile(self, filePath):
|
||||||
self._clearFileLoaded()
|
self._clearFileLoaded()
|
||||||
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath)))
|
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath)), notReadyAfterThis=True)
|
||||||
|
|
||||||
def setPosition(self, value):
|
def setPosition(self, value):
|
||||||
super(self.__class__, self).setPosition(value)
|
super(self.__class__, self).setPosition(value)
|
||||||
@ -206,10 +210,15 @@ class NewMpvPlayer(OldMpvPlayer):
|
|||||||
self.mpvErrorCheck(line)
|
self.mpvErrorCheck(line)
|
||||||
|
|
||||||
if line == "<SyncplayUpdateFile>" or "Playing:" in line:
|
if line == "<SyncplayUpdateFile>" or "Playing:" in line:
|
||||||
|
self._listener.setReadyToSend(False)
|
||||||
self._clearFileLoaded()
|
self._clearFileLoaded()
|
||||||
|
|
||||||
elif line == "</SyncplayUpdateFile>":
|
elif line == "</SyncplayUpdateFile>":
|
||||||
self._onFileUpdate()
|
self._onFileUpdate()
|
||||||
|
self._listener.setReadyToSend(True)
|
||||||
|
|
||||||
|
elif "Failed" in line or "failed" in line or "No video or audio streams selected" in line or "error" in line:
|
||||||
|
self._listener.setReadyToSend(True)
|
||||||
|
|
||||||
def _recentlyReset(self):
|
def _recentlyReset(self):
|
||||||
if not self.lastResetTime:
|
if not self.lastResetTime:
|
||||||
|
|||||||
@ -368,7 +368,7 @@ class VlcPlayer(BasePlayer):
|
|||||||
self.sendLine("get-vlc-version")
|
self.sendLine("get-vlc-version")
|
||||||
try:
|
try:
|
||||||
self.push(line + "\n")
|
self.push(line + "\n")
|
||||||
self.__playerController._client.ui.showDebugMessage(u"player >> {}".format(line))
|
self.__playerController._client.ui.showDebugMessage("player >> {}".format(line))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
if line == "close-vlc":
|
if line == "close-vlc":
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user