core: Trigger position changed from audio events.

Makes sure to only fire when the position changed to our intended seek target.
Otherwise we would also be triggering this when playback starts.
This commit is contained in:
Thomas Adamcik 2015-12-03 23:00:52 +01:00
parent e74eafb38a
commit aeb881896b
3 changed files with 14 additions and 4 deletions

View File

@ -90,6 +90,9 @@ class Core(
def stream_changed(self, uri):
self.playback._on_stream_changed(uri)
def position_changed(self, position):
self.playback._on_position_changed(position)
def state_changed(self, old_state, new_state, target_state):
# XXX: This is a temporary fix for issue #232 while we wait for a more
# permanent solution with the implementation of issue #234. When the

View File

@ -26,6 +26,7 @@ class PlaybackController(object):
self._current_tl_track = None
self._pending_tl_track = None
self._pending_position = None
self._last_position = None
self._previous = False
@ -220,6 +221,11 @@ class PlaybackController(object):
self.set_state(PlaybackState.PLAYING)
self._trigger_track_playback_started()
def _on_position_changed(self, position):
if self._pending_position == position:
self._trigger_seeked(position)
self._pending_position = None
def _on_about_to_finish_callback(self):
"""Callback that performs a blocking actor call to the real callback.
@ -455,14 +461,12 @@ class PlaybackController(object):
self.next()
return True
self._pending_position = time_position
backend = self._get_backend(self.get_current_tl_track())
if not backend:
return False
success = backend.playback.seek(time_position).get()
if success:
self._trigger_seeked(time_position)
return success
return backend.playback.seek(time_position).get()
def stop(self):
"""Stop playing."""

View File

@ -434,6 +434,7 @@ class EventEmissionTest(BaseTest):
self.core.playback.play(tl_tracks[0])
self.replay_events()
self.core.playback.seek(1000)
self.replay_events()
listener_mock.reset_mock()
self.core.playback.stop()
@ -456,6 +457,7 @@ class EventEmissionTest(BaseTest):
self.core.playback.play(tl_tracks[0])
self.replay_events()
self.core.playback.seek(1000)
self.replay_events()
listener_mock.reset_mock()
self.core.playback.next()
@ -504,6 +506,7 @@ class EventEmissionTest(BaseTest):
listener_mock.reset_mock()
self.core.playback.seek(1000)
self.replay_events()
listener_mock.send.assert_called_once_with(
'seeked', time_position=1000)