Converting tl_track_at_next into a function that takes the track argument.

Rewrote tests too.
This commit is contained in:
Javier Domingo Cansino 2013-08-07 21:38:16 +02:00
parent ec716fba82
commit 6abcad3e55
4 changed files with 66 additions and 48 deletions

View File

@ -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

View File

@ -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:

View File

@ -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():

View File

@ -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):