diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index 6a5b0dc7..51254521 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -148,7 +148,7 @@ class PlaybackController(object): else: self.stop(clear_current_track=True) - self.core.tracklist.mark_consumed(tlid=original_tl_track.tlid) + self.core.tracklist.mark("consumed", original_tl_track) def on_tracklist_change(self): """ @@ -213,16 +213,14 @@ class PlaybackController(object): backend = self._get_backend() if not backend or not backend.playback.play(tl_track.track).get(): logger.warning('Track is not playable: %s', tl_track.track.uri) - if self.core.tracklist.random and self.core.tracklist._shuffled: - self.core.tracklist._shuffled.remove(tl_track) + self.core.tracklist.mark("unplayable", tl_track) if on_error_step == 1: self.next() elif on_error_step == -1: self.previous() return - if self.core.tracklist.random and self.current_tl_track in self.core.tracklist._shuffled: - self.core.tracklist._shuffled.remove(self.current_tl_track) + self.core.tracklist.mark("played", tl_track) self._trigger_track_playback_started() diff --git a/mopidy/core/tracklist.py b/mopidy/core/tracklist.py index 8971745e..60a76845 100644 --- a/mopidy/core/tracklist.py +++ b/mopidy/core/tracklist.py @@ -434,18 +434,25 @@ class TracklistController(object): """ return self._tl_tracks[start:end] - def mark_consumed(self, **kwargs): + def mark(self, what, tl_track): """ - Marks the given track as played. + Marks the given track as specified. :param tl_track: Track to mark :type tl_track: :class:`mopidy.models.TlTrack` :rtype: True if the track was actually removed from the tracklist """ - if not self.consume: - return False - self.remove(**kwargs) - return True + if what == "consumed": + if not self.consume: + return False + self.remove(tlid=tl_track.tlid) + return True + elif what == "played": + if self.random and tl_track in self._shuffled: + self._shuffled.remove(tl_track) + elif what == "unplayable": + if self.random and self._shuffled: + self._shuffled.remove(tl_track) def _trigger_tracklist_changed(self): self._first_shuffle = True