diff --git a/mopidy/backends/base/playback.py b/mopidy/backends/base/playback.py index 3a548dda..57a7ad85 100644 --- a/mopidy/backends/base/playback.py +++ b/mopidy/backends/base/playback.py @@ -484,7 +484,10 @@ class PlaybackController(object): self.play_time_started = self._current_wall_time self.play_time_accumulated = time_position - return self.provider.seek(time_position) + success = self.provider.seek(time_position) + if success: + self._trigger_seeked() + return success def stop(self, clear_current_track=False): """ @@ -540,6 +543,10 @@ class PlaybackController(object): logger.debug(u'Triggering options changed event') BackendListener.send('options_changed') + def _trigger_seeked(self): + logger.debug(u'Triggering seeked event') + BackendListener.send('seeked') + class BasePlaybackProvider(object): """ diff --git a/mopidy/listeners.py b/mopidy/listeners.py index bb855b4d..ee360bf3 100644 --- a/mopidy/listeners.py +++ b/mopidy/listeners.py @@ -105,3 +105,12 @@ class BackendListener(object): *MAY* be implemented by actor. """ pass + + def seeked(self): + """ + Called whenever the time position changes by an unexpected amount, e.g. + at seek to a new time position. + + *MAY* be implemented by actor. + """ + pass diff --git a/tests/listeners_test.py b/tests/listeners_test.py index f2156d05..d67da692 100644 --- a/tests/listeners_test.py +++ b/tests/listeners_test.py @@ -30,3 +30,6 @@ class BackendListenerTest(unittest.TestCase): def test_listener_has_default_impl_for_volume_changed(self): self.listener.volume_changed() + + def test_listener_has_default_impl_for_seeked(self): + self.listener.seeked()