From a849327f65041735e28e5e11ea41f416944632ef Mon Sep 17 00:00:00 2001 From: epage Date: Fri, 7 May 2010 12:02:42 +0000 Subject: [PATCH] Caching duration to fix a seek while paused bug (Post 93) git-svn-id: file:///svnroot/nqaap/trunk@15 00ff6f12-f5ab-46b1-af0e-967c86d3154f --- src/opt/Nqa-Audiobook-player/SimpleGStreamer.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/opt/Nqa-Audiobook-player/SimpleGStreamer.py b/src/opt/Nqa-Audiobook-player/SimpleGStreamer.py index 75fce6b..4779ba5 100644 --- a/src/opt/Nqa-Audiobook-player/SimpleGStreamer.py +++ b/src/opt/Nqa-Audiobook-player/SimpleGStreamer.py @@ -13,9 +13,10 @@ class SimplePlayer(object): def __init__(self, on_playing_done = None): #Fields - self.has_file = False self.playing = False + self.__filename = "" self.__elapsed = 0 + self.__duration = 0 #Event callbacks self.on_playing_done = on_playing_done @@ -32,6 +33,10 @@ class SimplePlayer(object): self.time_format = gst.Format(gst.FORMAT_TIME) self.seek_flag = gst.SEEK_FLAG_FLUSH + @property + def has_file(self): + return 0 < len(self.__filename) + @gtk_toolbox.log_exception(_moduleLogger) def on_message(self, bus, message): t = message.type @@ -50,13 +55,15 @@ class SimplePlayer(object): def set_file(self, file): _moduleLogger.info("set file: %s", file) if os.path.isfile(file): + if self.__filename != file: + self._invalidate_cache() if self.playing: self.stop() file = os.path.abspath(file) # ensure absolute path _moduleLogger.debug("set file (absolute path): %s "%file) self.player.set_property("uri", "file://" + file) - self.has_file = True + self.__filename = file else: _moduleLogger.error("File: %s not found" % file) @@ -79,15 +86,20 @@ class SimplePlayer(object): def duration(self): try: - return self.player.query_duration(self.time_format, None)[0] + self.__duration = self.player.query_duration(self.time_format, None)[0] except: _moduleLogger.exception("Query failed") - return 0 + pass + return self.__duration def seek_time(self, ns): _moduleLogger.debug("Seeking to: %s", ns) self.player.seek_simple(self.time_format, self.seek_flag, ns) + def _invalidate_cache(self): + self.__elapsed = 0 + self.__duration = 0 + def __seek_percent(self, percent): format = gst.Format(gst.FORMAT_PERCENT) self.player.seek_simple(format, self.seek_flag, percent) -- 1.7.9.5