From 827305ad006eef1e2a880419a10faaee96585155 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Sat, 13 Feb 2010 22:36:42 +0100 Subject: [PATCH] Handle next at end of playlist properly --- mopidy/backends/gstreamer.py | 9 ++++++--- tests/backends/__init__.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/mopidy/backends/gstreamer.py b/mopidy/backends/gstreamer.py index d45fb008..0afc16da 100644 --- a/mopidy/backends/gstreamer.py +++ b/mopidy/backends/gstreamer.py @@ -73,7 +73,10 @@ class GStreamerPlaybackController(BasePlaybackController): def next(self): playlist = self.backend.current_playlist.playlist - self.playlist_position += 1 - self.current_track = playlist.tracks[self.playlist_position] + if self.playlist_position + 1 >= len(playlist.tracks): + self.stop() + else: + self.playlist_position += 1 + self.current_track = playlist.tracks[self.playlist_position] - self.play() + self.play() diff --git a/tests/backends/__init__.py b/tests/backends/__init__.py index 704b48c5..844911d2 100644 --- a/tests/backends/__init__.py +++ b/tests/backends/__init__.py @@ -203,3 +203,21 @@ class BasePlaybackControllerTest(object): def test_next_triggers_playback(self): self.playback.next() self.assertEqual(self.playback.state, self.playback.PLAYING) + + @populate_playlist + def test_next_at_end_of_playlist(self): + playback = self.backend.playback + tracks = self.backend.current_playlist.playlist.tracks + + playback.play() + + for i, track in enumerate(tracks): + self.assertEqual(playback.state, playback.PLAYING) + self.assertEqual(playback.current_track, track) + self.assertEqual(playback.playlist_position, i) + + playback.next() + + self.assertEqual(playback.state, playback.STOPPED) + self.assertEqual(playback.current_track, tracks[-1]) + self.assertEqual(playback.playlist_position, len(tracks) - 1)