From 442e753a115faeaf408dfd1e7e8397b537da0973 Mon Sep 17 00:00:00 2001 From: Et0h Date: Sat, 27 Sep 2014 00:27:39 +0100 Subject: [PATCH] mpv: Hopefully fix mpv compatability issues --- syncplay/constants.py | 4 +++- syncplay/players/mpv.py | 37 ++++++++++++++++++++++++++++++++----- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/syncplay/constants.py b/syncplay/constants.py index fe5a453..91218a6 100644 --- a/syncplay/constants.py +++ b/syncplay/constants.py @@ -108,9 +108,11 @@ 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', '--term-playing-msg=\nANS_filename=${filename}\nANS_length=${=length}\nANS_path=${path}\n'] +MPV_SLAVE_ARGS = ['--hr-seek=always', '--quiet', '--keep-open'] MPV_SLAVE_ARGS_WINDOWS = ['--slave-broken'] MPV_SLAVE_ARGS_NONWINDOWS = ['--input-terminal=no','--input-file=/dev/stdin'] +MPV_SLAVE_ARGS_NEW = ['--term-playing-msg=\nANS_filename=${filename}\nANS_length=${=length}\nANS_path=${path}\n'] +MPV_NEW_VERSION = False VLC_SLAVE_ARGS = ['--extraintf=luaintf', '--lua-intf=syncplay', '--no-quiet', '--no-input-fast-seek', '--play-and-pause', '--start-time=0'] VLC_SLAVE_NONOSX_ARGS = ['--no-one-instance', '--no-one-instance-when-started-from-file'] diff --git a/syncplay/players/mpv.py b/syncplay/players/mpv.py index 6260ada..d6a07b5 100644 --- a/syncplay/players/mpv.py +++ b/syncplay/players/mpv.py @@ -33,16 +33,35 @@ class MpvPlayer(MplayerPlayer): self._paused = self._client.getGlobalPaused() def _onFileUpdate(self): - pass + if not constants.MPV_NEW_VERSION: + oldFilename = self._filename + oldLength = self._duration + oldFilepath = self._filepath + self._fileUpdateClearEvents() + self._getFilename() + self._getLength() + self._getFilepath() + self._fileUpdateWaitEvents() + if (self._filename != oldFilename) or (self._duration != oldLength) or (self._filepath != oldFilepath): + self._client.updateFile(self._filename, self._duration, self._filepath) def _clearFileLoaded(self): self.fileLoaded = False self.lastLoadedTime = None def _loadFile(self, filePath): - self._clearFileLoaded() + if constants.MPV_NEW_VERSION: + self._clearFileLoaded() self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath))) + def openFile(self, filePath, resetPosition=False): + if resetPosition: + self.lastResetTime = time.time() + self._loadFile(filePath) + if self._paused != self._client.getGlobalPaused(): + self.setPaused(self._client.getGlobalPaused()) + self.setPosition(self._client.getGlobalPosition()) + def _handleUnknownLine(self, line): if "Error parsing option" in line or "Error parsing commandline option" in line: self.quitReason = getMessage("mpv-version-error") @@ -65,7 +84,13 @@ class MpvPlayer(MplayerPlayer): self._positionAsk.set() elif "Playing:" in line: - self._clearFileLoaded() + if constants.MPV_NEW_VERSION: + self._clearFileLoaded() + else: + self.fileLoaded = True + if not self._recentlyReset(): + self._onMPVFileUpdate() + self.reactor.callFromThread(self._onFileUpdate) def _recentlyReset(self): if not self.lastResetTime: @@ -100,9 +125,11 @@ class MpvPlayer(MplayerPlayer): ver = MpvPlayer.RE_VERSION.search(subprocess.check_output([path, '--version'])) except: ver = None - new_mpv = ver is None or int(ver.group(1)) > 0 or int(ver.group(2)) >= 5 + constants.MPV_NEW_VERSION = ver is None or int(ver.group(1)) > 0 or int(ver.group(2)) >= 5 args = constants.MPV_SLAVE_ARGS - if sys.platform.startswith('win') or not new_mpv: + if constants.MPV_NEW_VERSION or sys.platform.startswith('win'): + args.extend(constants.MPV_SLAVE_ARGS_NEW) + if sys.platform.startswith('win') or not constants.MPV_NEW_VERSION: args.extend(constants.MPV_SLAVE_ARGS_WINDOWS) else: args.extend(constants.MPV_SLAVE_ARGS_NONWINDOWS)