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
|
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
|
||||||
|
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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():
|
||||||
|
|||||||
@ -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):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user