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 The current playback state will be kept. If it was playing, playing
will continue. If it was paused, it will still be paused, etc. 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._trigger_track_playback_ended()
self.change_track(self.core.tracklist.tl_track_at_next) self.change_track(tl_track)
else: else:
self.stop(clear_current_track=True) self.stop(clear_current_track=True)
@ -203,7 +204,7 @@ class PlaybackController(object):
elif self.current_tl_track is not None: elif self.current_tl_track is not None:
tl_track = self.current_tl_track tl_track = self.current_tl_track
elif self.current_tl_track is None and on_error_step == 1: 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: elif self.current_tl_track is None and on_error_step == -1:
tl_track = self.core.tracklist.tl_track_at_previous tl_track = self.core.tracklist.tl_track_at_previous

View File

@ -182,47 +182,41 @@ class TracklistController(object):
except IndexError: except IndexError:
return None return None
def get_tl_track_at_next(self): def tl_track_at_next(self, tl_track):
tl_tracks = self.tl_tracks """
current_tl_track = self.core.playback.current_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 return None
if self.random and not self._shuffled: if self.random and not self._shuffled:
if self.repeat or self._first_shuffle: if self.repeat or self._first_shuffle:
logger.debug('Shuffling tracks') logger.debug('Shuffling tracks')
self._shuffled = tl_tracks self._shuffled = self.tl_tracks
random.shuffle(self._shuffled) random.shuffle(self._shuffled)
self._first_shuffle = False self._first_shuffle = False
if self.random and self._shuffled: if self.random and self._shuffled:
return self._shuffled[0] return self._shuffled[0]
if current_tl_track is None: if tl_track is None:
return tl_tracks[0] return self.tl_tracks[0]
position = self.tracklist_position(current_tl_track) position = self.tracklist_position(tl_track)
if self.repeat: if self.repeat:
return tl_tracks[(position + 1) % len(tl_tracks)] return self.tl_tracks[(position + 1) % len(self.tl_tracks)]
try: try:
return tl_tracks[position + 1] return self.tl_tracks[position + 1]
except IndexError: except IndexError:
return None 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): def get_tl_track_at_previous(self):
current_tl_track = self.core.playback.current_tl_track current_tl_track = self.core.playback.current_tl_track
if self.repeat or self.consume or self.random: if self.repeat or self.consume or self.random:

View File

@ -406,8 +406,9 @@ class MprisObject(dbus.service.Object):
def get_CanGoNext(self): def get_CanGoNext(self):
if not self.get_CanControl(): if not self.get_CanControl():
return False return False
tl_track = self.core.playback.current_tl_track.get()
return ( 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()) self.core.playback.current_tl_track.get())
def get_CanGoPrevious(self): def get_CanGoPrevious(self):
@ -420,9 +421,10 @@ class MprisObject(dbus.service.Object):
def get_CanPlay(self): def get_CanPlay(self):
if not self.get_CanControl(): if not self.get_CanControl():
return False return False
tl_track = self.core.playback.current_tl_track.get()
return ( return (
self.core.playback.current_tl_track.get() is not None or 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): def get_CanPause(self):
if not self.get_CanControl(): if not self.get_CanControl():

View File

@ -244,29 +244,34 @@ class PlaybackControllerTest(object):
@populate_tracklist @populate_tracklist
def test_next_track_before_play(self): 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 @populate_tracklist
def test_next_track_during_play(self): def test_next_track_during_play(self):
self.playback.play() 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 @populate_tracklist
def test_next_track_after_previous(self): def test_next_track_after_previous(self):
self.playback.play() self.playback.play()
self.playback.next() self.playback.next()
self.playback.previous() 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): 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 @populate_tracklist
def test_next_track_at_end_of_playlist(self): def test_next_track_at_end_of_playlist(self):
self.playback.play() self.playback.play()
for _ in self.tracklist.tl_tracks[1:]: for _ in self.tracklist.tl_tracks[1:]:
self.playback.next() 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 @populate_tracklist
def test_next_track_at_end_of_playlist_with_repeat(self): def test_next_track_at_end_of_playlist_with_repeat(self):
@ -274,13 +279,15 @@ class PlaybackControllerTest(object):
self.playback.play() self.playback.play()
for _ in self.tracks[1:]: for _ in self.tracks[1:]:
self.playback.next() 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 @populate_tracklist
def test_next_track_with_random(self): def test_next_track_with_random(self):
random.seed(1) random.seed(1)
self.tracklist.random = True 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 @populate_tracklist
def test_next_with_consume(self): def test_next_with_consume(self):
@ -310,9 +317,11 @@ class PlaybackControllerTest(object):
def test_next_track_with_random_after_append_playlist(self): def test_next_track_with_random_after_append_playlist(self):
random.seed(1) random.seed(1)
self.tracklist.random = True 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.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 @populate_tracklist
def test_end_of_track(self): def test_end_of_track(self):
@ -383,29 +392,34 @@ class PlaybackControllerTest(object):
@populate_tracklist @populate_tracklist
def test_end_of_track_track_before_play(self): 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 @populate_tracklist
def test_end_of_track_track_during_play(self): def test_end_of_track_track_during_play(self):
self.playback.play() 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 @populate_tracklist
def test_end_of_track_track_after_previous(self): def test_end_of_track_track_after_previous(self):
self.playback.play() self.playback.play()
self.playback.on_end_of_track() self.playback.on_end_of_track()
self.playback.previous() 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): 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 @populate_tracklist
def test_end_of_track_track_at_end_of_playlist(self): def test_end_of_track_track_at_end_of_playlist(self):
self.playback.play() self.playback.play()
for _ in self.tracklist.tl_tracks[1:]: for _ in self.tracklist.tl_tracks[1:]:
self.playback.on_end_of_track() 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 @populate_tracklist
def test_end_of_track_track_at_end_of_playlist_with_repeat(self): def test_end_of_track_track_at_end_of_playlist_with_repeat(self):
@ -413,13 +427,15 @@ class PlaybackControllerTest(object):
self.playback.play() self.playback.play()
for _ in self.tracks[1:]: for _ in self.tracks[1:]:
self.playback.on_end_of_track() 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 @populate_tracklist
def test_end_of_track_track_with_random(self): def test_end_of_track_track_with_random(self):
random.seed(1) random.seed(1)
self.tracklist.random = True 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 @populate_tracklist
def test_end_of_track_with_consume(self): 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): def test_end_of_track_track_with_random_after_append_playlist(self):
random.seed(1) random.seed(1)
self.tracklist.random = True 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.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 @populate_tracklist
def test_previous_track_before_play(self): def test_previous_track_before_play(self):
@ -849,14 +867,16 @@ class PlaybackControllerTest(object):
self.playback.play() self.playback.play()
for _ in self.tracks[1:]: for _ in self.tracks[1:]:
self.playback.next() 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 @populate_tracklist
def test_random_until_end_of_playlist_and_play_from_start(self): def test_random_until_end_of_playlist_and_play_from_start(self):
self.tracklist.repeat = True self.tracklist.repeat = True
for _ in self.tracks: for _ in self.tracks:
self.playback.next() 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.assertEqual(self.playback.state, PlaybackState.STOPPED)
self.playback.play() self.playback.play()
self.assertEqual(self.playback.state, PlaybackState.PLAYING) self.assertEqual(self.playback.state, PlaybackState.PLAYING)
@ -868,7 +888,8 @@ class PlaybackControllerTest(object):
self.playback.play() self.playback.play()
for _ in self.tracks: for _ in self.tracks:
self.playback.next() 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 @populate_tracklist
def test_played_track_during_random_not_played_again(self): def test_played_track_during_random_not_played_again(self):