Hopefully fix new mpv file change issues
This commit is contained in:
parent
db6bb28afb
commit
1c660244ef
@ -87,6 +87,7 @@ MPC_LOCK_WAIT_TIME = 0.2
|
||||
MPC_RETRY_WAIT_TIME = 0.01
|
||||
MPC_MAX_RETRIES = 30
|
||||
MPC_PAUSE_TOGGLE_DELAY = 0.05
|
||||
MPV_NEWFILE_IGNORE_TIME = 1
|
||||
VLC_OPEN_MAX_WAIT_TIME = 15
|
||||
VLC_MIN_PORT = 10000
|
||||
VLC_MAX_PORT = 55000
|
||||
@ -105,7 +106,7 @@ STYLE_NOFILEITEM_COLOR = 'blue'
|
||||
|
||||
MPLAYER_SLAVE_ARGS = ['-slave', '--hr-seek=always', '-nomsgcolor', '-msglevel', 'all=1:global=4:cplayer=4']
|
||||
# --quiet works with both mpv 0.2 and 0.3
|
||||
MPV_SLAVE_ARGS = ['--hr-seek=always', '--quiet', '--keep-open']
|
||||
MPV_SLAVE_ARGS = ['--hr-seek=always', '--quiet', '--keep-open', '--term-playing-msg=<SyncplayUpdateFile>\nANS_filename=${filename}\nANS_length=${=length}\nANS_path=${path}\n</SyncplayUpdateFile>']
|
||||
MPV_SLAVE_ARGS_WINDOWS = ['--slave-broken']
|
||||
MPV_SLAVE_ARGS_NONWINDOWS = ['--input-terminal=no','--input-file=/dev/stdin']
|
||||
VLC_SLAVE_ARGS = ['--extraintf=luaintf', '--lua-intf=syncplay', '--no-quiet', '--no-input-fast-seek',
|
||||
|
||||
@ -23,6 +23,8 @@ class MplayerPlayer(BasePlayer):
|
||||
self._filename = None
|
||||
self._filepath = None
|
||||
self.quitReason = None
|
||||
self.lastLoadedTime = None
|
||||
self.fileLoaded = False
|
||||
try:
|
||||
self._listener = self.__Listener(self, playerPath, filePath, args)
|
||||
except ValueError:
|
||||
@ -65,6 +67,9 @@ class MplayerPlayer(BasePlayer):
|
||||
self.reactor.callLater(0, self._client.initPlayer, self)
|
||||
self._onFileUpdate()
|
||||
|
||||
def _onMPVFileUpdate(self):
|
||||
pass
|
||||
|
||||
def askForStatus(self):
|
||||
self._positionAsk.clear()
|
||||
self._pausedAsk.clear()
|
||||
@ -87,6 +92,7 @@ class MplayerPlayer(BasePlayer):
|
||||
self._setProperty('speed', "{:.2f}".format(value))
|
||||
|
||||
def openFile(self, filePath):
|
||||
self._clearFileLoaded()
|
||||
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath)))
|
||||
self._onFileUpdate()
|
||||
if self._paused != self._client.getGlobalPaused():
|
||||
@ -124,18 +130,17 @@ class MplayerPlayer(BasePlayer):
|
||||
arg = arg.replace('"', '\\"')
|
||||
return u'"{}"'.format(arg)
|
||||
|
||||
def lineReceived(self, line):
|
||||
if "Error parsing option" in line:
|
||||
self.quitReason = getMessage("mpv-version-error")
|
||||
def _fileIsLoaded(self):
|
||||
return True
|
||||
|
||||
if "Failed to get value of property" in line:
|
||||
if "filename" in line:
|
||||
self._getFilename()
|
||||
elif "length" in line:
|
||||
self._getLength()
|
||||
elif "path" in line:
|
||||
self._getFilepath()
|
||||
return
|
||||
def _clearFileLoaded(self):
|
||||
pass
|
||||
|
||||
def _handleMPVLines(self, line):
|
||||
pass
|
||||
|
||||
def lineReceived(self, line):
|
||||
self._handleMPVLines(line)
|
||||
|
||||
match = self.RE_ANSWER.match(line)
|
||||
if not match:
|
||||
@ -145,10 +150,16 @@ class MplayerPlayer(BasePlayer):
|
||||
name = name.lower()
|
||||
|
||||
if name == self.POSITION_QUERY:
|
||||
self._position = float(value)
|
||||
if self._fileIsLoaded():
|
||||
self._position = float(value)
|
||||
else:
|
||||
self._position = self._client.getGlobalPosition()
|
||||
self._positionAsk.set()
|
||||
elif name == "pause":
|
||||
self._paused = bool(value == 'yes')
|
||||
if self._fileIsLoaded():
|
||||
self._paused = bool(value == 'yes')
|
||||
else:
|
||||
self._paused = self._client.getGlobalPaused()
|
||||
self._pausedAsk.set()
|
||||
elif name == "length":
|
||||
self._duration = float(value)
|
||||
|
||||
@ -1,8 +1,9 @@
|
||||
import re
|
||||
import subprocess
|
||||
from syncplay.players.mplayer import MplayerPlayer
|
||||
from syncplay.messages import getMessage
|
||||
from syncplay import constants
|
||||
import os, sys
|
||||
import os, sys, time
|
||||
|
||||
class MpvPlayer(MplayerPlayer):
|
||||
POSITION_QUERY = 'time-pos'
|
||||
@ -17,6 +18,52 @@ class MpvPlayer(MplayerPlayer):
|
||||
self._paused = not self._paused
|
||||
self._listener.sendLine('cycle pause')
|
||||
|
||||
def _onFileUpdate(self):
|
||||
pass
|
||||
|
||||
def _clearFileLoaded(self):
|
||||
self.fileLoaded = False
|
||||
self.lastLoadedTime = None
|
||||
|
||||
def _handleMPVLines(self, line):
|
||||
if "Error parsing option" in line:
|
||||
self.quitReason = getMessage("mpv-version-error")
|
||||
|
||||
elif line == "<SyncplayUpdateFile>":
|
||||
self._clearFileLoaded()
|
||||
|
||||
elif line == "</SyncplayUpdateFile>":
|
||||
self._onMPVFileUpdate()
|
||||
|
||||
elif "Failed to get value of property" in line:
|
||||
if "filename" in line:
|
||||
self._getFilename()
|
||||
elif "length" in line:
|
||||
self._getLength()
|
||||
elif "path" in line:
|
||||
self._getFilepath()
|
||||
elif "time-pos" in line:
|
||||
self.setPosition(self._client.getGlobalPosition())
|
||||
self._positionAsk.set()
|
||||
raise ValueError
|
||||
|
||||
elif "Playing:" in line:
|
||||
self._clearFileLoaded()
|
||||
|
||||
def _onMPVFileUpdate(self):
|
||||
self.fileLoaded = True
|
||||
self.lastLoadedTime = time.time()
|
||||
self.reactor.callFromThread(self._client.updateFile, self._filename, self._duration, self._filepath)
|
||||
self.reactor.callFromThread(self.setPosition, self._client.getGlobalPosition())
|
||||
if self._paused != self._client.getGlobalPaused():
|
||||
self.reactor.callFromThread(self._client.getGlobalPaused)
|
||||
|
||||
def _fileIsLoaded(self):
|
||||
if self.fileLoaded == True and self.lastLoadedTime != None and time.time() > (self.lastLoadedTime + constants.MPV_NEWFILE_IGNORE_TIME):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def run(client, playerPath, filePath, args):
|
||||
return MpvPlayer(client, MpvPlayer.getExpandedPath(playerPath), filePath, args)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user