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:
parent
e74eafb38a
commit
aeb881896b
@ -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
|
||||
|
||||
@ -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."""
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user