Converted tracklist_position() to be called with the track one wants to have information of,
/mopidy/frontends/mpd/protocol/status.py@189 should be checked for gathering a value before the rest.
This commit is contained in:
parent
4db3999371
commit
68ea483c7b
@ -133,25 +133,25 @@ class TracklistController(object):
|
||||
Playback continues after current song.
|
||||
"""
|
||||
|
||||
def get_tracklist_position(self):
|
||||
if self.core.playback.current_tl_track is None:
|
||||
def tracklist_position(self, tl_track):
|
||||
"""
|
||||
The position of the current track in the tracklist.
|
||||
|
||||
Read-only.
|
||||
"""
|
||||
if tl_track is None:
|
||||
return None
|
||||
try:
|
||||
return self.core.tracklist.tl_tracks.index(self.core.playback.current_tl_track)
|
||||
return self.core.tracklist.tl_tracks.index(tl_track)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
tracklist_position = property(get_tracklist_position)
|
||||
"""
|
||||
The position of the current track in the tracklist.
|
||||
|
||||
Read-only.
|
||||
"""
|
||||
|
||||
def get_tl_track_at_eot(self):
|
||||
# pylint: disable = R0911
|
||||
# Too many return statements
|
||||
|
||||
current_tl_track = self.core.playback.current_tl_track
|
||||
tl_tracks = self.core.tracklist.tl_tracks
|
||||
|
||||
if not tl_tracks:
|
||||
@ -167,17 +167,18 @@ class TracklistController(object):
|
||||
if self.random and self._shuffled:
|
||||
return self._shuffled[0]
|
||||
|
||||
if self.core.playback.current_tl_track is None:
|
||||
if current_tl_track is None:
|
||||
return tl_tracks[0]
|
||||
|
||||
position = self.tracklist_position(current_tl_track)
|
||||
if self.repeat and self.single:
|
||||
return tl_tracks[self.tracklist_position]
|
||||
return tl_tracks[position]
|
||||
|
||||
if self.repeat and not self.single:
|
||||
return tl_tracks[(self.tracklist_position + 1) % len(tl_tracks)]
|
||||
return tl_tracks[(position + 1) % len(tl_tracks)]
|
||||
|
||||
try:
|
||||
return tl_tracks[self.tracklist_position + 1]
|
||||
return tl_tracks[position + 1]
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
@ -192,6 +193,7 @@ class TracklistController(object):
|
||||
|
||||
def get_tl_track_at_next(self):
|
||||
tl_tracks = self.core.tracklist.tl_tracks
|
||||
current_tl_track = self.core.playback.current_tl_track
|
||||
|
||||
if not tl_tracks:
|
||||
return None
|
||||
@ -206,14 +208,15 @@ class TracklistController(object):
|
||||
if self.random and self._shuffled:
|
||||
return self._shuffled[0]
|
||||
|
||||
if self.core.playback.current_tl_track is None:
|
||||
if current_tl_track is None:
|
||||
return tl_tracks[0]
|
||||
|
||||
position = self.tracklist_position(current_tl_track)
|
||||
if self.repeat:
|
||||
return tl_tracks[(self.tracklist_position + 1) % len(tl_tracks)]
|
||||
return tl_tracks[(position + 1) % len(tl_tracks)]
|
||||
|
||||
try:
|
||||
return tl_tracks[self.tracklist_position + 1]
|
||||
return tl_tracks[position + 1]
|
||||
except IndexError:
|
||||
return None
|
||||
|
||||
@ -230,13 +233,15 @@ class TracklistController(object):
|
||||
"""
|
||||
|
||||
def get_tl_track_at_previous(self):
|
||||
current_tl_track = self.core.playback.current_tl_track
|
||||
if self.repeat or self.core.tracklist.consume or self.random:
|
||||
return self.core.playback.current_tl_track
|
||||
return current_tl_track
|
||||
|
||||
if self.tracklist_position in (None, 0):
|
||||
position = self.tracklist_position(current_tl_track)
|
||||
if position in (None, 0):
|
||||
return None
|
||||
|
||||
return self.core.tracklist.tl_tracks[self.tracklist_position - 1]
|
||||
return self.core.tracklist.tl_tracks[position - 1]
|
||||
|
||||
tl_track_at_previous = property(get_tl_track_at_previous)
|
||||
"""
|
||||
|
||||
@ -329,7 +329,8 @@ def seek(context, songpos, seconds):
|
||||
|
||||
- issues ``seek 1 120`` without quotes around the arguments.
|
||||
"""
|
||||
if context.core.tracklist.tracklist_position.get() != int(songpos):
|
||||
tl_track = context.core.playback.current_tl_track.get()
|
||||
if context.core.tracklist.tracklist_position(tl_track).get() != int(songpos):
|
||||
playpos(context, songpos)
|
||||
context.core.playback.seek(int(seconds) * 1000).get()
|
||||
|
||||
|
||||
@ -36,10 +36,10 @@ def currentsong(context):
|
||||
Displays the song info of the current song (same song that is
|
||||
identified in status).
|
||||
"""
|
||||
current_tl_track = context.core.playback.current_tl_track.get()
|
||||
if current_tl_track is not None:
|
||||
position = context.core.tracklist.tracklist_position.get()
|
||||
return track_to_mpd_format(current_tl_track, position=position)
|
||||
tl_track = context.core.playback.current_tl_track.get()
|
||||
if tl_track is not None:
|
||||
position = context.core.tracklist.tracklist_position(tl_track).get()
|
||||
return track_to_mpd_format(tl_track, position=position)
|
||||
|
||||
|
||||
@handle_request(r'^idle$')
|
||||
@ -185,7 +185,8 @@ def status(context):
|
||||
'playback.state': context.core.playback.state,
|
||||
'playback.current_tl_track': context.core.playback.current_tl_track,
|
||||
'tracklist.tracklist_position': (
|
||||
context.core.tracklist.tracklist_position),
|
||||
context.core.tracklist.tracklist_position(
|
||||
context.core.playback.current_tl_track.get())),
|
||||
'playback.time_position': context.core.playback.time_position,
|
||||
}
|
||||
pykka.get_all(futures.values())
|
||||
|
||||
@ -179,13 +179,15 @@ class PlaybackControllerTest(object):
|
||||
def test_next(self):
|
||||
self.playback.play()
|
||||
|
||||
old_position = self.tracklist.tracklist_position
|
||||
old_uri = self.playback.current_track.uri
|
||||
tl_track = self.playback.current_tl_track
|
||||
old_position = self.tracklist.tracklist_position(tl_track)
|
||||
old_uri = tl_track.track.uri
|
||||
|
||||
self.playback.next()
|
||||
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(
|
||||
self.tracklist.tracklist_position, old_position + 1)
|
||||
self.tracklist.tracklist_position(tl_track), old_position + 1)
|
||||
self.assertNotEqual(self.playback.current_track.uri, old_uri)
|
||||
|
||||
@populate_tracklist
|
||||
@ -205,7 +207,8 @@ class PlaybackControllerTest(object):
|
||||
for i, track in enumerate(self.tracks):
|
||||
self.assertEqual(self.playback.state, PlaybackState.PLAYING)
|
||||
self.assertEqual(self.playback.current_track, track)
|
||||
self.assertEqual(self.tracklist.tracklist_position, i)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), i)
|
||||
|
||||
self.playback.next()
|
||||
|
||||
@ -315,13 +318,15 @@ class PlaybackControllerTest(object):
|
||||
def test_end_of_track(self):
|
||||
self.playback.play()
|
||||
|
||||
old_position = self.tracklist.tracklist_position
|
||||
old_uri = self.playback.current_track.uri
|
||||
tl_track = self.playback.current_tl_track
|
||||
old_position = self.tracklist.tracklist_position(tl_track)
|
||||
old_uri = tl_track.track.uri
|
||||
|
||||
self.playback.on_end_of_track()
|
||||
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(
|
||||
self.tracklist.tracklist_position, old_position + 1)
|
||||
self.tracklist.tracklist_position(tl_track), old_position + 1)
|
||||
self.assertNotEqual(self.playback.current_track.uri, old_uri)
|
||||
|
||||
@populate_tracklist
|
||||
@ -341,7 +346,8 @@ class PlaybackControllerTest(object):
|
||||
for i, track in enumerate(self.tracks):
|
||||
self.assertEqual(self.playback.state, PlaybackState.PLAYING)
|
||||
self.assertEqual(self.playback.current_track, track)
|
||||
self.assertEqual(self.tracklist.tracklist_position, i)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), i)
|
||||
|
||||
self.playback.on_end_of_track()
|
||||
|
||||
@ -500,24 +506,28 @@ class PlaybackControllerTest(object):
|
||||
|
||||
@populate_tracklist
|
||||
def test_initial_tracklist_position(self):
|
||||
self.assertEqual(self.tracklist.tracklist_position, None)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), None)
|
||||
|
||||
@populate_tracklist
|
||||
def test_tracklist_position_during_play(self):
|
||||
self.playback.play()
|
||||
self.assertEqual(self.tracklist.tracklist_position, 0)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), 0)
|
||||
|
||||
@populate_tracklist
|
||||
def test_tracklist_position_after_next(self):
|
||||
self.playback.play()
|
||||
self.playback.next()
|
||||
self.assertEqual(self.tracklist.tracklist_position, 1)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), 1)
|
||||
|
||||
@populate_tracklist
|
||||
def test_tracklist_position_at_end_of_playlist(self):
|
||||
self.playback.play(self.tracklist.tl_tracks[-1])
|
||||
self.playback.on_end_of_track()
|
||||
self.assertEqual(self.tracklist.tracklist_position, None)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), None)
|
||||
|
||||
def test_on_tracklist_change_gets_called(self):
|
||||
callback = self.playback.on_tracklist_change
|
||||
|
||||
Loading…
Reference in New Issue
Block a user