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_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
|
||||||
VLC_OPEN_MAX_WAIT_TIME = 15
|
VLC_OPEN_MAX_WAIT_TIME = 15
|
||||||
VLC_MIN_PORT = 10000
|
VLC_MIN_PORT = 10000
|
||||||
VLC_MAX_PORT = 55000
|
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']
|
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
|
# --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_WINDOWS = ['--slave-broken']
|
||||||
MPV_SLAVE_ARGS_NONWINDOWS = ['--input-terminal=no','--input-file=/dev/stdin']
|
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',
|
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._filename = None
|
||||||
self._filepath = None
|
self._filepath = None
|
||||||
self.quitReason = None
|
self.quitReason = None
|
||||||
|
self.lastLoadedTime = None
|
||||||
|
self.fileLoaded = False
|
||||||
try:
|
try:
|
||||||
self._listener = self.__Listener(self, playerPath, filePath, args)
|
self._listener = self.__Listener(self, playerPath, filePath, args)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
@ -65,6 +67,9 @@ class MplayerPlayer(BasePlayer):
|
|||||||
self.reactor.callLater(0, self._client.initPlayer, self)
|
self.reactor.callLater(0, self._client.initPlayer, self)
|
||||||
self._onFileUpdate()
|
self._onFileUpdate()
|
||||||
|
|
||||||
|
def _onMPVFileUpdate(self):
|
||||||
|
pass
|
||||||
|
|
||||||
def askForStatus(self):
|
def askForStatus(self):
|
||||||
self._positionAsk.clear()
|
self._positionAsk.clear()
|
||||||
self._pausedAsk.clear()
|
self._pausedAsk.clear()
|
||||||
@ -87,6 +92,7 @@ class MplayerPlayer(BasePlayer):
|
|||||||
self._setProperty('speed', "{:.2f}".format(value))
|
self._setProperty('speed', "{:.2f}".format(value))
|
||||||
|
|
||||||
def openFile(self, filePath):
|
def openFile(self, filePath):
|
||||||
|
self._clearFileLoaded()
|
||||||
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath)))
|
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath)))
|
||||||
self._onFileUpdate()
|
self._onFileUpdate()
|
||||||
if self._paused != self._client.getGlobalPaused():
|
if self._paused != self._client.getGlobalPaused():
|
||||||
@ -124,18 +130,17 @@ class MplayerPlayer(BasePlayer):
|
|||||||
arg = arg.replace('"', '\\"')
|
arg = arg.replace('"', '\\"')
|
||||||
return u'"{}"'.format(arg)
|
return u'"{}"'.format(arg)
|
||||||
|
|
||||||
def lineReceived(self, line):
|
def _fileIsLoaded(self):
|
||||||
if "Error parsing option" in line:
|
return True
|
||||||
self.quitReason = getMessage("mpv-version-error")
|
|
||||||
|
|
||||||
if "Failed to get value of property" in line:
|
def _clearFileLoaded(self):
|
||||||
if "filename" in line:
|
pass
|
||||||
self._getFilename()
|
|
||||||
elif "length" in line:
|
def _handleMPVLines(self, line):
|
||||||
self._getLength()
|
pass
|
||||||
elif "path" in line:
|
|
||||||
self._getFilepath()
|
def lineReceived(self, line):
|
||||||
return
|
self._handleMPVLines(line)
|
||||||
|
|
||||||
match = self.RE_ANSWER.match(line)
|
match = self.RE_ANSWER.match(line)
|
||||||
if not match:
|
if not match:
|
||||||
@ -145,10 +150,16 @@ class MplayerPlayer(BasePlayer):
|
|||||||
name = name.lower()
|
name = name.lower()
|
||||||
|
|
||||||
if name == self.POSITION_QUERY:
|
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()
|
self._positionAsk.set()
|
||||||
elif name == "pause":
|
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()
|
self._pausedAsk.set()
|
||||||
elif name == "length":
|
elif name == "length":
|
||||||
self._duration = float(value)
|
self._duration = float(value)
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
from syncplay.players.mplayer import MplayerPlayer
|
from syncplay.players.mplayer import MplayerPlayer
|
||||||
|
from syncplay.messages import getMessage
|
||||||
from syncplay import constants
|
from syncplay import constants
|
||||||
import os, sys
|
import os, sys, time
|
||||||
|
|
||||||
class MpvPlayer(MplayerPlayer):
|
class MpvPlayer(MplayerPlayer):
|
||||||
POSITION_QUERY = 'time-pos'
|
POSITION_QUERY = 'time-pos'
|
||||||
@ -17,6 +18,52 @@ class MpvPlayer(MplayerPlayer):
|
|||||||
self._paused = not self._paused
|
self._paused = not self._paused
|
||||||
self._listener.sendLine('cycle pause')
|
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
|
@staticmethod
|
||||||
def run(client, playerPath, filePath, args):
|
def run(client, playerPath, filePath, args):
|
||||||
return MpvPlayer(client, MpvPlayer.getExpandedPath(playerPath), filePath, args)
|
return MpvPlayer(client, MpvPlayer.getExpandedPath(playerPath), filePath, args)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user