diff --git a/syncplay/players/basePlayer.py b/syncplay/players/basePlayer.py index 6fffa3d..97fc2a2 100644 --- a/syncplay/players/basePlayer.py +++ b/syncplay/players/basePlayer.py @@ -49,7 +49,7 @@ class BasePlayer(object): ''' @type filePath: string ''' - def openFile(self, filePath): + def openFile(self, filePath, resetPosition=False): raise NotImplementedError() diff --git a/syncplay/players/mpc.py b/syncplay/players/mpc.py index 0dfef45..d23d857 100644 --- a/syncplay/players/mpc.py +++ b/syncplay/players/mpc.py @@ -385,7 +385,7 @@ class MPCHCAPIPlayer(BasePlayer): if filePath: self.openFile(filePath) - def openFile(self, filePath): + def openFile(self, filePath, resetPosition=False): self._mpcApi.openFile(filePath) def displayMessage(self, message, duration = (constants.OSD_DURATION*1000)): diff --git a/syncplay/players/mplayer.py b/syncplay/players/mplayer.py index 06624a5..d79c048 100644 --- a/syncplay/players/mplayer.py +++ b/syncplay/players/mplayer.py @@ -25,7 +25,7 @@ class MplayerPlayer(BasePlayer): self.quitReason = None self.lastLoadedTime = None self.fileLoaded = False - self._resetPosition = False + self.lastResetTime = None try: self._listener = self.__Listener(self, playerPath, filePath, args) except ValueError: @@ -92,7 +92,9 @@ class MplayerPlayer(BasePlayer): def _loadFile(self, filePath): self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(filePath))) - def openFile(self, filePath): + def openFile(self, filePath, resetPosition=False): + if resetPosition: + self.lastResetTime = time.time() self._loadFile(filePath) self._onFileUpdate() if self._paused != self._client.getGlobalPaused(): diff --git a/syncplay/players/mpv.py b/syncplay/players/mpv.py index 61309a8..6260ada 100644 --- a/syncplay/players/mpv.py +++ b/syncplay/players/mpv.py @@ -19,7 +19,7 @@ class MpvPlayer(MplayerPlayer): self._listener.sendLine('cycle pause') def _storePosition(self, value): - if self._resetPosition: + if self._recentlyReset(): self._position = 0 elif self._fileIsLoaded(): self._position = value @@ -65,17 +65,22 @@ class MpvPlayer(MplayerPlayer): self._positionAsk.set() elif "Playing:" in line: - if self._position < 1: - self._resetPosition = True self._clearFileLoaded() + def _recentlyReset(self): + if not self.lastResetTime: + return False + elif time.time() < self.lastResetTime + constants.MPV_NEWFILE_IGNORE_TIME: + return True + else: + return False + def _onMPVFileUpdate(self): self.fileLoaded = True self.lastLoadedTime = time.time() self.reactor.callFromThread(self._client.updateFile, self._filename, self._duration, self._filepath) - if not self._resetPosition: + if not (self._recentlyReset()): self.reactor.callFromThread(self.setPosition, self._client.getGlobalPosition()) - self._resetPosition = False if self._paused != self._client.getGlobalPaused(): self.reactor.callFromThread(self._client.getGlobalPaused) diff --git a/syncplay/players/vlc.py b/syncplay/players/vlc.py index 4ca0d91..fe6f79a 100644 --- a/syncplay/players/vlc.py +++ b/syncplay/players/vlc.py @@ -117,7 +117,7 @@ class VlcPlayer(BasePlayer): def _isASCII (self, s): return all(ord(c) < 128 for c in s) - def openFile(self, filePath): + def openFile(self, filePath, resetPosition=False): if self._isASCII(filePath): self._listener.sendLine('load-file: {}'.format(filePath.encode('ascii', 'ignore'))) else: diff --git a/syncplay/ui/gui.py b/syncplay/ui/gui.py index 476c700..4f8c32b 100644 --- a/syncplay/ui/gui.py +++ b/syncplay/ui/gui.py @@ -443,7 +443,7 @@ class MainWindow(QtGui.QMainWindow): self._syncplayClient._player.openFile(dropfilepath) else: self._syncplayClient.setPosition(0) - self._syncplayClient._player.openFile(dropfilepath) + self._syncplayClient._player.openFile(dropfilepath, resetPosition=True) self._syncplayClient.setPosition(0) def saveSettings(self):