Converting tl_track_at_next into a function that takes the track argument.
Rewrote tests too.
This commit is contained in:
parent
ec716fba82
commit
6abcad3e55
@ -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
|
||||
|
||||
|
||||
@ -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:
|
||||
|
||||
@ -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():
|
||||
|
||||
@ -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):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user