diff --git a/mopidy/core/tracklist.py b/mopidy/core/tracklist.py index 5d85e190..8e2789c4 100644 --- a/mopidy/core/tracklist.py +++ b/mopidy/core/tracklist.py @@ -161,6 +161,11 @@ class TracklistController(object): 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') @@ -176,10 +181,7 @@ class TracklistController(object): position = self.index(tl_track) - if self.repeat and self.single: - return self.tl_tracks[position] - - if self.repeat and not self.single: + if self.repeat: return self.tl_tracks[(position + 1) % len(self.tl_tracks)] try: diff --git a/tests/backends/local/playback_test.py b/tests/backends/local/playback_test.py index cd67a0e6..5543b3ab 100644 --- a/tests/backends/local/playback_test.py +++ b/tests/backends/local/playback_test.py @@ -339,6 +339,7 @@ class LocalPlaybackProviderTest(unittest.TestCase): self.tracklist.single = True self.tracklist.repeat = True self.playback.play() + self.assertEqual(self.playback.current_track, self.tracks[0]) self.playback.next() self.assertEqual(self.playback.current_track, self.tracks[1]) @@ -899,9 +900,38 @@ class LocalPlaybackProviderTest(unittest.TestCase): self.tracklist.single = True self.tracklist.repeat = True self.playback.play() + self.assertEqual(self.playback.current_track, self.tracks[0]) self.playback.on_end_of_track() self.assertEqual(self.playback.current_track, self.tracks[0]) + @populate_tracklist + def test_end_of_song_with_single_random_and_repeat_starts_same(self): + self.tracklist.single = True + self.tracklist.repeat = True + self.tracklist.random = True + self.playback.play() + current_track = self.playback.current_track + self.playback.on_end_of_track() + self.assertEqual(self.playback.current_track, current_track) + + @populate_tracklist + def test_end_of_song_with_single_stops(self): + self.tracklist.single = True + self.playback.play() + self.assertEqual(self.playback.current_track, self.tracks[0]) + self.playback.on_end_of_track() + self.assertEqual(self.playback.current_track, None) + self.assertEqual(self.playback.state, PlaybackState.STOPPED) + + @populate_tracklist + def test_end_of_song_with_single_and_random_stops(self): + self.tracklist.single = True + self.tracklist.random = True + self.playback.play() + self.playback.on_end_of_track() + self.assertEqual(self.playback.current_track, None) + self.assertEqual(self.playback.state, PlaybackState.STOPPED) + @populate_tracklist def test_end_of_playlist_stops(self): self.playback.play(self.tracklist.tl_tracks[-1])