Further separation of mpv from mplayer

This commit is contained in:
et0h 2020-05-08 21:39:07 +01:00
parent 134152d072
commit 9bfe65ecf1

View File

@ -8,7 +8,6 @@ import threading
import ast import ast
from syncplay import constants from syncplay import constants
from syncplay.players.mplayer import MplayerPlayer
from syncplay.messages import getMessage from syncplay.messages import getMessage
from syncplay.utils import isURL, findResourcePath from syncplay.utils import isURL, findResourcePath
from syncplay.utils import isMacOS, isWindows from syncplay.utils import isMacOS, isWindows
@ -16,12 +15,13 @@ from syncplay.utils import isMacOS, isWindows
from syncplay.players.basePlayer import BasePlayer from syncplay.players.basePlayer import BasePlayer
class MpvPlayer(MplayerPlayer): class MpvPlayer(BasePlayer):
RE_VERSION = re.compile(r'.*mpv (\d+)\.(\d+)\.\d+.*') RE_VERSION = re.compile(r'.*mpv (\d+)\.(\d+)\.\d+.*')
osdMessageSeparator = "\\n" osdMessageSeparator = "\\n"
osdMessageSeparator = "; " # TODO: Make conditional osdMessageSeparator = "; " # TODO: Make conditional
POSITION_QUERY = 'time-pos' POSITION_QUERY = 'time-pos'
OSD_QUERY = 'show_text' OSD_QUERY = 'show_text'
RE_ANSWER = re.compile(constants.MPLAYER_ANSWER_REGEX)
lastResetTime = None lastResetTime = None
lastMPVPositionUpdate = None lastMPVPositionUpdate = None
alertOSDSupported = True alertOSDSupported = True
@ -117,11 +117,19 @@ class MpvPlayer(MplayerPlayer):
self._client.ui.showErrorMessage(line) self._client.ui.showErrorMessage(line)
def oldDisplayMessage(
self, message,
duration=(constants.OSD_DURATION * 1000), OSDType=constants.OSD_NOTIFICATION,
mood=constants.MESSAGE_NEUTRAL
):
messageString = self._sanitizeText(message.replace("\\n", "<NEWLINE>")).replace("<NEWLINE>", "\\n")
self._listener.sendLine('{} "{!s}" {} {}'.format(
self.OSD_QUERY, messageString, duration, constants.MPLAYER_OSD_LEVEL))
def displayMessage(self, message, duration=(constants.OSD_DURATION * 1000), OSDType=constants.OSD_NOTIFICATION, def displayMessage(self, message, duration=(constants.OSD_DURATION * 1000), OSDType=constants.OSD_NOTIFICATION,
mood=constants.MESSAGE_NEUTRAL): mood=constants.MESSAGE_NEUTRAL):
if not self._client._config["chatOutputEnabled"]: if not self._client._config["chatOutputEnabled"]:
MplayerPlayer.displayMessage(self, message=message, duration=duration, OSDType=OSDType, mood=mood) self.oldDisplayMessage(self, message=message, duration=duration, OSDType=OSDType, mood=mood)
return return
messageString = self._sanitizeText(message.replace("\\n", "<NEWLINE>")).replace( messageString = self._sanitizeText(message.replace("\\n", "<NEWLINE>")).replace(
"\\\\", constants.MPV_INPUT_BACKSLASH_SUBSTITUTE_CHARACTER).replace("<NEWLINE>", "\\n") "\\\\", constants.MPV_INPUT_BACKSLASH_SUBSTITUTE_CHARACTER).replace("<NEWLINE>", "\\n")
@ -358,7 +366,9 @@ class MpvPlayer(MplayerPlayer):
self._client.ui.showDebugMessage( self._client.ui.showDebugMessage(
"Did not seek as recently reset and {} below 'do not reset position' threshold".format(value)) "Did not seek as recently reset and {} below 'do not reset position' threshold".format(value))
return return
MplayerPlayer.setPosition(self, value) self._position = max(value, 0)
self._setProperty(self.POSITION_QUERY, "{}".format(value))
time.sleep(0.03)
self.lastMPVPositionUpdate = time.time() self.lastMPVPositionUpdate = time.time()
def openFile(self, filePath, resetPosition=False): def openFile(self, filePath, resetPosition=False):
@ -547,7 +557,7 @@ class MpvPlayer(MplayerPlayer):
self.__process = subprocess.Popen( self.__process = subprocess.Popen(
call, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT, call, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT,
env=env, bufsize=0) env=env, bufsize=0)
threading.Thread.__init__(self, name="MPlayer Listener") threading.Thread.__init__(self, name="MPV Listener")
def __getCwd(self, filePath, env): def __getCwd(self, filePath, env):
if not filePath: if not filePath:
@ -565,11 +575,8 @@ class MpvPlayer(MplayerPlayer):
def run(self): def run(self):
line = self.__process.stdout.readline() line = self.__process.stdout.readline()
line = line.decode('utf-8') line = line.decode('utf-8')
if "MPlayer 1" in line: line = line.rstrip("\r\n")
self.__playerController.notMplayer2() self.__playerController.lineReceived(line)
else:
line = line.rstrip("\r\n")
self.__playerController.lineReceived(line)
while self.__process.poll() is None: while self.__process.poll() is None:
line = self.__process.stdout.readline() line = self.__process.stdout.readline()
line = line.decode('utf-8') line = line.decode('utf-8')