mpv: Hopefully fix reset on regular file change bug

This commit is contained in:
Et0h 2014-09-26 13:40:20 +01:00
parent b9f20dfb07
commit 634124b4e5
6 changed files with 18 additions and 11 deletions

View File

@ -49,7 +49,7 @@ class BasePlayer(object):
''' '''
@type filePath: string @type filePath: string
''' '''
def openFile(self, filePath): def openFile(self, filePath, resetPosition=False):
raise NotImplementedError() raise NotImplementedError()

View File

@ -385,7 +385,7 @@ class MPCHCAPIPlayer(BasePlayer):
if filePath: if filePath:
self.openFile(filePath) self.openFile(filePath)
def openFile(self, filePath): def openFile(self, filePath, resetPosition=False):
self._mpcApi.openFile(filePath) self._mpcApi.openFile(filePath)
def displayMessage(self, message, duration = (constants.OSD_DURATION*1000)): def displayMessage(self, message, duration = (constants.OSD_DURATION*1000)):

View File

@ -25,7 +25,7 @@ class MplayerPlayer(BasePlayer):
self.quitReason = None self.quitReason = None
self.lastLoadedTime = None self.lastLoadedTime = None
self.fileLoaded = False self.fileLoaded = False
self._resetPosition = False self.lastResetTime = None
try: try:
self._listener = self.__Listener(self, playerPath, filePath, args) self._listener = self.__Listener(self, playerPath, filePath, args)
except ValueError: except ValueError:
@ -92,7 +92,9 @@ class MplayerPlayer(BasePlayer):
def _loadFile(self, filePath): def _loadFile(self, filePath):
self._listener.sendLine(u'loadfile {}'.format(self._quoteArg(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._loadFile(filePath)
self._onFileUpdate() self._onFileUpdate()
if self._paused != self._client.getGlobalPaused(): if self._paused != self._client.getGlobalPaused():

View File

@ -19,7 +19,7 @@ class MpvPlayer(MplayerPlayer):
self._listener.sendLine('cycle pause') self._listener.sendLine('cycle pause')
def _storePosition(self, value): def _storePosition(self, value):
if self._resetPosition: if self._recentlyReset():
self._position = 0 self._position = 0
elif self._fileIsLoaded(): elif self._fileIsLoaded():
self._position = value self._position = value
@ -65,17 +65,22 @@ class MpvPlayer(MplayerPlayer):
self._positionAsk.set() self._positionAsk.set()
elif "Playing:" in line: elif "Playing:" in line:
if self._position < 1:
self._resetPosition = True
self._clearFileLoaded() 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): def _onMPVFileUpdate(self):
self.fileLoaded = True self.fileLoaded = True
self.lastLoadedTime = time.time() self.lastLoadedTime = time.time()
self.reactor.callFromThread(self._client.updateFile, self._filename, self._duration, self._filepath) 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.reactor.callFromThread(self.setPosition, self._client.getGlobalPosition())
self._resetPosition = False
if self._paused != self._client.getGlobalPaused(): if self._paused != self._client.getGlobalPaused():
self.reactor.callFromThread(self._client.getGlobalPaused) self.reactor.callFromThread(self._client.getGlobalPaused)

View File

@ -117,7 +117,7 @@ class VlcPlayer(BasePlayer):
def _isASCII (self, s): def _isASCII (self, s):
return all(ord(c) < 128 for c in s) return all(ord(c) < 128 for c in s)
def openFile(self, filePath): def openFile(self, filePath, resetPosition=False):
if self._isASCII(filePath): if self._isASCII(filePath):
self._listener.sendLine('load-file: {}'.format(filePath.encode('ascii', 'ignore'))) self._listener.sendLine('load-file: {}'.format(filePath.encode('ascii', 'ignore')))
else: else:

View File

@ -443,7 +443,7 @@ class MainWindow(QtGui.QMainWindow):
self._syncplayClient._player.openFile(dropfilepath) self._syncplayClient._player.openFile(dropfilepath)
else: else:
self._syncplayClient.setPosition(0) self._syncplayClient.setPosition(0)
self._syncplayClient._player.openFile(dropfilepath) self._syncplayClient._player.openFile(dropfilepath, resetPosition=True)
self._syncplayClient.setPosition(0) self._syncplayClient.setPosition(0)
def saveSettings(self): def saveSettings(self):