Merge pull request #1329 from adamcik/develop

core: Mark tracks as played via playback ended events
This commit is contained in:
Stein Magnus Jodal 2015-11-21 10:37:37 +01:00
commit 6d37d462ac

View File

@ -25,7 +25,9 @@ class PlaybackController(object):
self._current_tl_track = None self._current_tl_track = None
self._pending_tl_track = None self._pending_tl_track = None
self._last_position = None self._last_position = None
self._previous = False
if self._audio: if self._audio:
self._audio.set_about_to_finish_callback( self._audio.set_about_to_finish_callback(
@ -208,6 +210,7 @@ class PlaybackController(object):
else: else:
# This code path handles the stop() case, uri should be none. # This code path handles the stop() case, uri should be none.
position, self._last_position = self._last_position, None position, self._last_position = self._last_position, None
self._trigger_track_playback_ended(position) self._trigger_track_playback_ended(position)
self._stream_title = None self._stream_title = None
@ -242,9 +245,6 @@ class PlaybackController(object):
if backend: if backend:
backend.playback.change_track(next_tl_track.track).get() backend.playback.change_track(next_tl_track.track).get()
# TODO: move to stream changed and eos or just via trigger ended
self.core.tracklist._mark_played(original_tl_track)
def _on_tracklist_change(self): def _on_tracklist_change(self):
""" """
Tell the playback controller that the current playlist has changed. Tell the playback controller that the current playlist has changed.
@ -267,8 +267,6 @@ class PlaybackController(object):
state = self.get_state() state = self.get_state()
current = self._pending_tl_track or self._current_tl_track current = self._pending_tl_track or self._current_tl_track
self.core.tracklist._mark_played(self._current_tl_track)
while current: while current:
pending = self.core.tracklist.next_track(current) pending = self.core.tracklist.next_track(current)
if self._change(pending, state): if self._change(pending, state):
@ -327,7 +325,6 @@ class PlaybackController(object):
self.resume() self.resume()
return return
original = self._current_tl_track
current = self._pending_tl_track or self._current_tl_track current = self._pending_tl_track or self._current_tl_track
pending = tl_track or current or self.core.tracklist.next_track(None) pending = tl_track or current or self.core.tracklist.next_track(None)
@ -344,8 +341,6 @@ class PlaybackController(object):
current = pending current = pending
pending = self.core.tracklist.next_track(current) pending = self.core.tracklist.next_track(current)
# TODO: move to top and get rid of original?
self.core.tracklist._mark_played(original)
# TODO return result? # TODO return result?
def _change(self, pending_tl_track, state): def _change(self, pending_tl_track, state):
@ -390,6 +385,7 @@ class PlaybackController(object):
The current playback state will be kept. If it was playing, playing The current playback state will be kept. If it was playing, playing
will continue. If it was paused, it will still be paused, etc. will continue. If it was paused, it will still be paused, etc.
""" """
self._previous = True
state = self.get_state() state = self.get_state()
current = self._pending_tl_track or self._current_tl_track current = self._pending_tl_track or self._current_tl_track
@ -495,20 +491,25 @@ class PlaybackController(object):
time_position=self.get_time_position()) time_position=self.get_time_position())
def _trigger_track_playback_started(self): def _trigger_track_playback_started(self):
# TODO: replace with stream-changed
logger.debug('Triggering track playback started event')
if self.get_current_tl_track() is None: if self.get_current_tl_track() is None:
return return
logger.debug('Triggering track playback started event')
tl_track = self.get_current_tl_track() tl_track = self.get_current_tl_track()
self.core.tracklist._mark_playing(tl_track) self.core.tracklist._mark_playing(tl_track)
self.core.history._add_track(tl_track.track) self.core.history._add_track(tl_track.track)
listener.CoreListener.send('track_playback_started', tl_track=tl_track) listener.CoreListener.send('track_playback_started', tl_track=tl_track)
def _trigger_track_playback_ended(self, time_position_before_stop): def _trigger_track_playback_ended(self, time_position_before_stop):
logger.debug('Triggering track playback ended event')
if self.get_current_tl_track() is None: if self.get_current_tl_track() is None:
return return
logger.debug('Triggering track playback ended event')
if not self._previous:
self.core.tracklist._mark_played(self._current_tl_track)
self._previous = False
# TODO: Use the lowest of track duration and position. # TODO: Use the lowest of track duration and position.
listener.CoreListener.send( listener.CoreListener.send(
'track_playback_ended', 'track_playback_ended',
@ -522,5 +523,6 @@ class PlaybackController(object):
old_state=old_state, new_state=new_state) old_state=old_state, new_state=new_state)
def _trigger_seeked(self, time_position): def _trigger_seeked(self, time_position):
# TODO: Trigger this from audio events?
logger.debug('Triggering seeked event') logger.debug('Triggering seeked event')
listener.CoreListener.send('seeked', time_position=time_position) listener.CoreListener.send('seeked', time_position=time_position)