From ba55181bc1ddab4760fd0a2a27b08dc2d5f66bf0 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Sun, 20 Oct 2013 21:48:42 +0200 Subject: [PATCH] core: Reduce duplication between next and eot track handling. --- mopidy/core/tracklist.py | 36 +++++++----------------------------- 1 file changed, 7 insertions(+), 29 deletions(-) diff --git a/mopidy/core/tracklist.py b/mopidy/core/tracklist.py index 8e2789c4..d995029c 100644 --- a/mopidy/core/tracklist.py +++ b/mopidy/core/tracklist.py @@ -158,36 +158,15 @@ class TracklistController(object): :type tl_track: :class:`mopidy.models.TlTrack` or :class:`None` :rtype: :class:`mopidy.models.TlTrack` or :class:`None` """ - if not self.tl_tracks: - return None - if self.single and self.repeat: return tl_track elif self.single: return None - if self.random and not self._shuffled: - if self.repeat or self._first_shuffle: - logger.debug('Shuffling tracks') - self._shuffled = self.tl_tracks - random.shuffle(self._shuffled) - self._first_shuffle = False - - if self.random and self._shuffled: - return self._shuffled[0] - - if tl_track is None: - return self.tl_tracks[0] - - position = self.index(tl_track) - - if self.repeat: - return self.tl_tracks[(position + 1) % len(self.tl_tracks)] - - try: - return self.tl_tracks[position + 1] - except IndexError: - return None + # Current differnce between next and eot handling is that eot needs to + # handle single, with that out of the way the rest of the logic is + # shared. + return self.next_track(tl_track) def next_track(self, tl_track): """ @@ -220,13 +199,12 @@ class TracklistController(object): if tl_track is None: return self.tl_tracks[0] - position = self.index(tl_track) - + next_index = self.index(tl_track) + 1 if self.repeat: - return self.tl_tracks[(position + 1) % len(self.tl_tracks)] + next_index %= len(self.tl_tracks) try: - return self.tl_tracks[position + 1] + return self.tl_tracks[next_index] except IndexError: return None