From 6f5f1b95103bef2e938ba4a760cd50273dedf62b Mon Sep 17 00:00:00 2001 From: Graham Booker Date: Fri, 8 Feb 2019 16:56:38 -0600 Subject: [PATCH] Allow seeking with varying delay. --- lib/util.py | 1 + lib/windows/seekdialog.py | 31 ++++++++++++++++++--------- resources/language/English/strings.po | 4 ++++ resources/settings.xml | 1 + 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/lib/util.py b/lib/util.py index 427ff991..efdab80a 100644 --- a/lib/util.py +++ b/lib/util.py @@ -87,6 +87,7 @@ class AdvancedSettings(object): ("debug", False), ("kodi_skip_stepping", False), ("auto_seek", True), + ("auto_seek_delay", 0), ("dynamic_timeline_seek", False), ("fast_back", False), ) diff --git a/lib/windows/seekdialog.py b/lib/windows/seekdialog.py index 4d7753f5..2140003c 100644 --- a/lib/windows/seekdialog.py +++ b/lib/windows/seekdialog.py @@ -64,7 +64,6 @@ class SeekDialog(kodigui.BaseDialog): HIDE_DELAY = 4 # This uses the Cron tick so is +/- 1 second accurate OSD_HIDE_ANIMATION_DURATION = 0.2 - AUTO_SEEK_DELAY = 1 SKIP_STEPS = {"negative": [-10000], "positive": [30000]} def __init__(self, *args, **kwargs): @@ -101,7 +100,7 @@ def __init__(self, *args, **kwargs): self._osdHideAnimationTimeout = 0 self._osdHideFast = False self._hideDelay = self.HIDE_DELAY - self._autoSeekDelay = self.AUTO_SEEK_DELAY + self._autoSeekDelay = util.advancedSettings.autoSeekDelay self._atSkipStep = -1 self._lastSkipDirection = None self._forcedLastSkipAmount = None @@ -472,11 +471,18 @@ def skipBack(self, without_osd=False): def delayedSeek(self): self.setProperty('button.seek', '1') - self._delayedSeekTimeout = time.time() + 1.0 - - if not self._delayedSeekThread or not self._delayedSeekThread.isAlive(): - self._delayedSeekThread = threading.Thread(target=self._delayedSeek) - self._delayedSeekThread.start() + delay = self._autoSeekDelay; + + if delay > 0: + self._delayedSeekTimeout = time.time() + delay + + if not self._delayedSeekThread or not self._delayedSeekThread.isAlive(): + self._delayedSeekThread = threading.Thread(target=self._delayedSeek) + self._delayedSeekThread.start() + else: + # Do seek now + self._performSeek() + self.resetSeeking() def _delayedSeek(self): try: @@ -485,11 +491,16 @@ def _delayedSeek(self): break if not xbmc.abortRequested and self._delayedSeekTimeout is not None: - self._lastSkipDirection = None - self._forcedLastSkipAmount = None - self.doSeek() + self._performSeek() except: util.ERROR() + finally: + self.resetSeeking() + + def _performSeek(self): + self._lastSkipDirection = None + self._forcedLastSkipAmount = None + self.doSeek() def handleDialog(self, func): self.hasDialog = True diff --git a/resources/language/English/strings.po b/resources/language/English/strings.po index 90041a57..e2c85baf 100644 --- a/resources/language/English/strings.po +++ b/resources/language/English/strings.po @@ -975,6 +975,10 @@ msgctxt "#32485" msgid "Go back instantly with the previous menu action in scrolled views" msgstr "" +msgctxt "#32487" +msgid "Seek Delay" +msgstr "" + msgctxt "#32492" msgid "Kodi Subtitle Settings" msgstr "" \ No newline at end of file diff --git a/resources/settings.xml b/resources/settings.xml index a30da7ce..52ef17c8 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -10,6 +10,7 @@ +