From 6abcad3e5509e05ea76f23ec4630746b5ebdb902 Mon Sep 17 00:00:00 2001 From: Javier Domingo Cansino Date: Wed, 7 Aug 2013 21:38:16 +0200 Subject: [PATCH] Converting tl_track_at_next into a function that takes the track argument. Rewrote tests too. --- mopidy/core/playback.py | 7 ++-- mopidy/core/tracklist.py | 38 ++++++++----------- mopidy/frontends/mpris/objects.py | 6 ++- tests/backends/base/playback.py | 63 ++++++++++++++++++++----------- 4 files changed, 66 insertions(+), 48 deletions(-) diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index ed02e8ac..742864b5 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -170,9 +170,10 @@ class PlaybackController(object): The current playback state will be kept. If it was playing, playing will continue. If it was paused, it will still be paused, etc. """ - if self.core.tracklist.tl_track_at_next: + tl_track = self.core.tracklist.tl_track_at_next(self.current_tl_track) + if tl_track: self._trigger_track_playback_ended() - self.change_track(self.core.tracklist.tl_track_at_next) + self.change_track(tl_track) else: self.stop(clear_current_track=True) @@ -203,7 +204,7 @@ class PlaybackController(object): elif self.current_tl_track is not None: tl_track = self.current_tl_track elif self.current_tl_track is None and on_error_step == 1: - tl_track = self.core.tracklist.tl_track_at_next + tl_track = self.core.tracklist.tl_track_at_next(tl_track) elif self.current_tl_track is None and on_error_step == -1: tl_track = self.core.tracklist.tl_track_at_previous diff --git a/mopidy/core/tracklist.py b/mopidy/core/tracklist.py index 42180799..aa2f18ef 100644 --- a/mopidy/core/tracklist.py +++ b/mopidy/core/tracklist.py @@ -182,47 +182,41 @@ class TracklistController(object): except IndexError: return None - def get_tl_track_at_next(self): - tl_tracks = self.tl_tracks - current_tl_track = self.core.playback.current_tl_track + def tl_track_at_next(self, tl_track): + """ + The track that will be played if calling :meth:`next()`. - if not tl_tracks: + For normal playback this is the next track in the playlist. If repeat + is enabled the next track can loop around the playlist. When random is + enabled this should be a random track, all tracks should be played once + before the list repeats. + """ + + if not self.tl_tracks: return None if self.random and not self._shuffled: if self.repeat or self._first_shuffle: logger.debug('Shuffling tracks') - self._shuffled = tl_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 current_tl_track is None: - return tl_tracks[0] + if tl_track is None: + return self.tl_tracks[0] - position = self.tracklist_position(current_tl_track) + position = self.tracklist_position(tl_track) if self.repeat: - return tl_tracks[(position + 1) % len(tl_tracks)] + return self.tl_tracks[(position + 1) % len(self.tl_tracks)] try: - return tl_tracks[position + 1] + return self.tl_tracks[position + 1] except IndexError: return None - tl_track_at_next = property(get_tl_track_at_next) - """ - The track that will be played if calling :meth:`next()`. - - Read-only. A :class:`mopidy.models.TlTrack`. - - For normal playback this is the next track in the playlist. If repeat - is enabled the next track can loop around the playlist. When random is - enabled this should be a random track, all tracks should be played once - before the list repeats. - """ - def get_tl_track_at_previous(self): current_tl_track = self.core.playback.current_tl_track if self.repeat or self.consume or self.random: diff --git a/mopidy/frontends/mpris/objects.py b/mopidy/frontends/mpris/objects.py index d4f28a83..5253f609 100644 --- a/mopidy/frontends/mpris/objects.py +++ b/mopidy/frontends/mpris/objects.py @@ -406,8 +406,9 @@ class MprisObject(dbus.service.Object): def get_CanGoNext(self): if not self.get_CanControl(): return False + tl_track = self.core.playback.current_tl_track.get() return ( - self.core.tracklist.tl_track_at_next.get() != + self.core.tracklist.tl_track_at_next(tl_track).get() != self.core.playback.current_tl_track.get()) def get_CanGoPrevious(self): @@ -420,9 +421,10 @@ class MprisObject(dbus.service.Object): def get_CanPlay(self): if not self.get_CanControl(): return False + tl_track = self.core.playback.current_tl_track.get() return ( self.core.playback.current_tl_track.get() is not None or - self.core.tracklist.tl_track_at_next.get() is not None) + self.core.tracklist.tl_track_at_next(tl_track).get() is not None) def get_CanPause(self): if not self.get_CanControl(): diff --git a/tests/backends/base/playback.py b/tests/backends/base/playback.py index 32c0abf7..8f57e219 100644 --- a/tests/backends/base/playback.py +++ b/tests/backends/base/playback.py @@ -244,29 +244,34 @@ class PlaybackControllerTest(object): @populate_tracklist def test_next_track_before_play(self): - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[0]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[0]) @populate_tracklist def test_next_track_during_play(self): self.playback.play() - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[1]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[1]) @populate_tracklist def test_next_track_after_previous(self): self.playback.play() self.playback.next() self.playback.previous() - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[1]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[1]) def test_next_track_empty_playlist(self): - self.assertEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), None) @populate_tracklist def test_next_track_at_end_of_playlist(self): self.playback.play() for _ in self.tracklist.tl_tracks[1:]: self.playback.next() - self.assertEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), None) @populate_tracklist def test_next_track_at_end_of_playlist_with_repeat(self): @@ -274,13 +279,15 @@ class PlaybackControllerTest(object): self.playback.play() for _ in self.tracks[1:]: self.playback.next() - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[0]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[0]) @populate_tracklist def test_next_track_with_random(self): random.seed(1) self.tracklist.random = True - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[2]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[2]) @populate_tracklist def test_next_with_consume(self): @@ -310,9 +317,11 @@ class PlaybackControllerTest(object): def test_next_track_with_random_after_append_playlist(self): random.seed(1) self.tracklist.random = True - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[2]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[2]) self.tracklist.add(self.tracks[:1]) - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[1]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[1]) @populate_tracklist def test_end_of_track(self): @@ -383,29 +392,34 @@ class PlaybackControllerTest(object): @populate_tracklist def test_end_of_track_track_before_play(self): - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[0]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[0]) @populate_tracklist def test_end_of_track_track_during_play(self): self.playback.play() - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[1]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[1]) @populate_tracklist def test_end_of_track_track_after_previous(self): self.playback.play() self.playback.on_end_of_track() self.playback.previous() - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[1]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[1]) def test_end_of_track_track_empty_playlist(self): - self.assertEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), None) @populate_tracklist def test_end_of_track_track_at_end_of_playlist(self): self.playback.play() for _ in self.tracklist.tl_tracks[1:]: self.playback.on_end_of_track() - self.assertEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), None) @populate_tracklist def test_end_of_track_track_at_end_of_playlist_with_repeat(self): @@ -413,13 +427,15 @@ class PlaybackControllerTest(object): self.playback.play() for _ in self.tracks[1:]: self.playback.on_end_of_track() - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[0]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[0]) @populate_tracklist def test_end_of_track_track_with_random(self): random.seed(1) self.tracklist.random = True - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[2]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[2]) @populate_tracklist def test_end_of_track_with_consume(self): @@ -441,9 +457,11 @@ class PlaybackControllerTest(object): def test_end_of_track_track_with_random_after_append_playlist(self): random.seed(1) self.tracklist.random = True - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[2]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[2]) self.tracklist.add(self.tracks[:1]) - self.assertEqual(self.tracklist.tl_track_at_next, self.tl_tracks[1]) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), self.tl_tracks[1]) @populate_tracklist def test_previous_track_before_play(self): @@ -849,14 +867,16 @@ class PlaybackControllerTest(object): self.playback.play() for _ in self.tracks[1:]: self.playback.next() - self.assertEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertEqual(self.tracklist.tl_track_at_next(tl_track), None) @populate_tracklist def test_random_until_end_of_playlist_and_play_from_start(self): self.tracklist.repeat = True for _ in self.tracks: self.playback.next() - self.assertNotEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertNotEqual(self.tracklist.tl_track_at_next(tl_track), None) self.assertEqual(self.playback.state, PlaybackState.STOPPED) self.playback.play() self.assertEqual(self.playback.state, PlaybackState.PLAYING) @@ -868,7 +888,8 @@ class PlaybackControllerTest(object): self.playback.play() for _ in self.tracks: self.playback.next() - self.assertNotEqual(self.tracklist.tl_track_at_next, None) + tl_track = self.playback.current_tl_track + self.assertNotEqual(self.tracklist.tl_track_at_next(tl_track), None) @populate_tracklist def test_played_track_during_random_not_played_again(self):