Attempt to fix VLC file chane state issue

This commit is contained in:
Etoh 2013-05-23 18:32:06 +02:00
parent 42778029c8
commit d40576d0fe

View File

@ -28,6 +28,7 @@ class VlcPlayer(BasePlayer):
self._duration = None self._duration = None
self._filename = None self._filename = None
self._filepath = None self._filepath = None
self._filechanged = False
self._durationAsk = threading.Event() self._durationAsk = threading.Event()
self._filenameAsk = threading.Event() self._filenameAsk = threading.Event()
@ -68,12 +69,16 @@ class VlcPlayer(BasePlayer):
self.setPosition(self._client.getGlobalPosition()) self.setPosition(self._client.getGlobalPosition())
def askForStatus(self): def askForStatus(self):
self._filechanged = False
self._positionAsk.clear() self._positionAsk.clear()
self._pausedAsk.clear() self._pausedAsk.clear()
self._listener.sendLine(".") self._listener.sendLine(".")
self._positionAsk.wait() if self._filechanged == False:
self._pausedAsk.wait() self._positionAsk.wait()
self._client.updatePlayerStatus(self._paused, self._position) self._pausedAsk.wait()
self._client.updatePlayerStatus(self._paused, self._position)
else:
self._client.updatePlayerStatus(self._client.getGlobalPaused(), self._client.getGlobalPosition())
def displayMessage(self, message, duration = constants.OSD_DURATION * 1000): def displayMessage(self, message, duration = constants.OSD_DURATION * 1000):
duration /= 1000 duration /= 1000
@ -101,10 +106,12 @@ class VlcPlayer(BasePlayer):
name, value = match.group('command'), match.group('argument') name, value = match.group('command'), match.group('argument')
if(line == "filepath-change-notification"): if(line == "filepath-change-notification"):
self._filechanged = True
t = threading.Thread(target=self._onFileUpdate) t = threading.Thread(target=self._onFileUpdate)
t.setDaemon(True) t.setDaemon(True)
t.start() t.start()
elif (name == "filepath" and value != "no-input"): elif (name == "filepath" and value != "no-input"):
self._filechanged = True
if("file://" in value): if("file://" in value):
value = value.replace("file://", "") value = value.replace("file://", "")
if(not os.path.isfile(value)): if(not os.path.isfile(value)):
@ -115,12 +122,13 @@ class VlcPlayer(BasePlayer):
self._duration = float(value.replace(",", ".")) self._duration = float(value.replace(",", "."))
self._durationAsk.set() self._durationAsk.set()
elif(name == "playstate"): elif(name == "playstate"):
self._paused = bool(value != 'playing') if(value != "no-input") else self._client.getGlobalPaused() self._paused = bool(value != 'playing') if(value != "no-input" and self._filechanged == False) else self._client.getGlobalPaused()
self._pausedAsk.set() self._pausedAsk.set()
elif(name == "position"): elif(name == "position"):
self._position = float(value.replace(",", ".")) if (value != "no-input") else self._client.getGlobalPosition() self._position = float(value.replace(",", ".")) if (value != "no-input" and self._filechanged == False) else self._client.getGlobalPosition()
self._positionAsk.set() self._positionAsk.set()
elif(name == "filename"): elif(name == "filename"):
self._filechanged = True
self._filename = value self._filename = value
self._filenameAsk.set() self._filenameAsk.set()
elif (line[:16] == "VLC media player"): elif (line[:16] == "VLC media player"):