core: Merged tracklist_position to index inside TracklistController
docs: Updated changelog.rst
This commit is contained in:
parent
fac2c8af7d
commit
11d82056a9
@ -21,8 +21,8 @@ v0.15.0 (UNRELEASED)
|
||||
mark songs, some Playback properties have been converted into functions and
|
||||
both functions and properties have been moved into Tracklist to have more
|
||||
modularity:
|
||||
- Properties converted into functions that need arguments:
|
||||
:meth:`tracklist_position`
|
||||
- Properties merged into functions: :attr:`tracklist_position` merged to
|
||||
:meth:`index`
|
||||
- Properties moved: :attr:`random`, :attr:`repeat`, :attr:`consume` and
|
||||
:attr:`single`
|
||||
- Method created from properties: :meth:`next_track` from
|
||||
|
||||
@ -133,14 +133,14 @@ class TracklistController(object):
|
||||
Playback continues after current song.
|
||||
"""
|
||||
|
||||
def tracklist_position(self, tl_track):
|
||||
def index(self, tl_track):
|
||||
"""
|
||||
The position of the given track in the tracklist.
|
||||
"""
|
||||
if tl_track is None:
|
||||
return None
|
||||
try:
|
||||
return self.tl_tracks.index(tl_track)
|
||||
return self._tl_tracks.index(tl_track)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
@ -172,7 +172,7 @@ class TracklistController(object):
|
||||
if tl_track is None:
|
||||
return self.tl_tracks[0]
|
||||
|
||||
position = self.tracklist_position(tl_track)
|
||||
position = self.index(tl_track)
|
||||
if self.repeat and self.single:
|
||||
return self.tl_tracks[position]
|
||||
|
||||
@ -214,7 +214,7 @@ class TracklistController(object):
|
||||
if tl_track is None:
|
||||
return self.tl_tracks[0]
|
||||
|
||||
position = self.tracklist_position(tl_track)
|
||||
position = self.index(tl_track)
|
||||
if self.repeat:
|
||||
return self.tl_tracks[(position + 1) % len(self.tl_tracks)]
|
||||
|
||||
@ -240,7 +240,7 @@ class TracklistController(object):
|
||||
if self.repeat or self.consume or self.random:
|
||||
return tl_track
|
||||
|
||||
position = self.tracklist_position(tl_track)
|
||||
position = self.index(tl_track)
|
||||
if position in (None, 0):
|
||||
return None
|
||||
|
||||
@ -335,18 +335,6 @@ class TracklistController(object):
|
||||
lambda ct: getattr(ct.track, key) == value, matches)
|
||||
return matches
|
||||
|
||||
def index(self, tl_track):
|
||||
"""
|
||||
Get index of the given :class:`mopidy.models.TlTrack` in the tracklist.
|
||||
|
||||
Raises :exc:`ValueError` if not found.
|
||||
|
||||
:param tl_track: track to find the index of
|
||||
:type tl_track: :class:`mopidy.models.TlTrack`
|
||||
:rtype: int
|
||||
"""
|
||||
return self._tl_tracks.index(tl_track)
|
||||
|
||||
def move(self, start, end, to_position):
|
||||
"""
|
||||
Move the tracks in the slice ``[start:end]`` to ``to_position``.
|
||||
|
||||
@ -330,7 +330,7 @@ def seek(context, songpos, seconds):
|
||||
- issues ``seek 1 120`` without quotes around the arguments.
|
||||
"""
|
||||
tl_track = context.core.playback.current_tl_track.get()
|
||||
if context.core.tracklist.tracklist_position(tl_track).get() != int(songpos):
|
||||
if context.core.tracklist.index(tl_track).get() != int(songpos):
|
||||
playpos(context, songpos)
|
||||
context.core.playback.seek(int(seconds) * 1000).get()
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ def currentsong(context):
|
||||
"""
|
||||
tl_track = context.core.playback.current_tl_track.get()
|
||||
if tl_track is not None:
|
||||
position = context.core.tracklist.tracklist_position(tl_track).get()
|
||||
position = context.core.tracklist.index(tl_track).get()
|
||||
return track_to_mpd_format(tl_track, position=position)
|
||||
|
||||
|
||||
@ -184,8 +184,8 @@ def status(context):
|
||||
'tracklist.single': context.core.tracklist.single,
|
||||
'playback.state': context.core.playback.state,
|
||||
'playback.current_tl_track': context.core.playback.current_tl_track,
|
||||
'tracklist.tracklist_position': (
|
||||
context.core.tracklist.tracklist_position(
|
||||
'tracklist.index': (
|
||||
context.core.tracklist.index(
|
||||
context.core.playback.current_tl_track.get())),
|
||||
'playback.time_position': context.core.playback.time_position,
|
||||
}
|
||||
@ -254,7 +254,7 @@ def _status_songid(futures):
|
||||
|
||||
|
||||
def _status_songpos(futures):
|
||||
return futures['tracklist.tracklist_position'].get()
|
||||
return futures['tracklist.index'].get()
|
||||
|
||||
|
||||
def _status_state(futures):
|
||||
|
||||
@ -180,14 +180,14 @@ class PlaybackControllerTest(object):
|
||||
self.playback.play()
|
||||
|
||||
tl_track = self.playback.current_tl_track
|
||||
old_position = self.tracklist.tracklist_position(tl_track)
|
||||
old_position = self.tracklist.index(tl_track)
|
||||
old_uri = tl_track.track.uri
|
||||
|
||||
self.playback.next()
|
||||
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(
|
||||
self.tracklist.tracklist_position(tl_track), old_position + 1)
|
||||
self.tracklist.index(tl_track), old_position + 1)
|
||||
self.assertNotEqual(self.playback.current_track.uri, old_uri)
|
||||
|
||||
@populate_tracklist
|
||||
@ -208,7 +208,7 @@ class PlaybackControllerTest(object):
|
||||
self.assertEqual(self.playback.state, PlaybackState.PLAYING)
|
||||
self.assertEqual(self.playback.current_track, track)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), i)
|
||||
self.assertEqual(self.tracklist.index(tl_track), i)
|
||||
|
||||
self.playback.next()
|
||||
|
||||
@ -328,14 +328,14 @@ class PlaybackControllerTest(object):
|
||||
self.playback.play()
|
||||
|
||||
tl_track = self.playback.current_tl_track
|
||||
old_position = self.tracklist.tracklist_position(tl_track)
|
||||
old_position = self.tracklist.index(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(tl_track), old_position + 1)
|
||||
self.tracklist.index(tl_track), old_position + 1)
|
||||
self.assertNotEqual(self.playback.current_track.uri, old_uri)
|
||||
|
||||
@populate_tracklist
|
||||
@ -356,7 +356,7 @@ class PlaybackControllerTest(object):
|
||||
self.assertEqual(self.playback.state, PlaybackState.PLAYING)
|
||||
self.assertEqual(self.playback.current_track, track)
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), i)
|
||||
self.assertEqual(self.tracklist.index(tl_track), i)
|
||||
|
||||
self.playback.on_end_of_track()
|
||||
|
||||
@ -528,29 +528,29 @@ class PlaybackControllerTest(object):
|
||||
self.assertEqual(self.playback.current_track, self.tracks[1])
|
||||
|
||||
@populate_tracklist
|
||||
def test_initial_tracklist_position(self):
|
||||
def test_initial_index(self):
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), None)
|
||||
self.assertEqual(self.tracklist.index(tl_track), None)
|
||||
|
||||
@populate_tracklist
|
||||
def test_tracklist_position_during_play(self):
|
||||
def test_index_during_play(self):
|
||||
self.playback.play()
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), 0)
|
||||
self.assertEqual(self.tracklist.index(tl_track), 0)
|
||||
|
||||
@populate_tracklist
|
||||
def test_tracklist_position_after_next(self):
|
||||
def test_index_after_next(self):
|
||||
self.playback.play()
|
||||
self.playback.next()
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), 1)
|
||||
self.assertEqual(self.tracklist.index(tl_track), 1)
|
||||
|
||||
@populate_tracklist
|
||||
def test_tracklist_position_at_end_of_playlist(self):
|
||||
def test_index_at_end_of_playlist(self):
|
||||
self.playback.play(self.tracklist.tl_tracks[-1])
|
||||
self.playback.on_end_of_track()
|
||||
tl_track = self.playback.current_tl_track
|
||||
self.assertEqual(self.tracklist.tracklist_position(tl_track), None)
|
||||
self.assertEqual(self.tracklist.index(tl_track), None)
|
||||
|
||||
def test_on_tracklist_change_gets_called(self):
|
||||
callback = self.playback.on_tracklist_change
|
||||
|
||||
@ -165,9 +165,9 @@ class TracklistControllerTest(object):
|
||||
self.assertEquals(1, self.controller.index(tl_tracks[1]))
|
||||
self.assertEquals(2, self.controller.index(tl_tracks[2]))
|
||||
|
||||
def test_index_raises_value_error_if_item_not_found(self):
|
||||
test = lambda: self.controller.index(TlTrack(0, Track()))
|
||||
self.assertRaises(ValueError, test)
|
||||
def test_index_returns_none_if_item_not_found(self):
|
||||
index = self.controller.index(TlTrack(0, Track()))
|
||||
self.assertEquals(None, index)
|
||||
|
||||
@populate_tracklist
|
||||
def test_move_single(self):
|
||||
|
||||
@ -313,7 +313,7 @@ class JsonRpcBatchTest(JsonRpcTestBase):
|
||||
|
||||
|
||||
class JsonRpcSingleCommandErrorTest(JsonRpcTestBase):
|
||||
def test_application_error_response(self):
|
||||
def test_application_error_response_is_none(self):
|
||||
request = {
|
||||
'jsonrpc': '2.0',
|
||||
'method': 'core.tracklist.index',
|
||||
@ -322,17 +322,11 @@ class JsonRpcSingleCommandErrorTest(JsonRpcTestBase):
|
||||
}
|
||||
response = self.jrw.handle_data(request)
|
||||
|
||||
self.assertNotIn('result', response)
|
||||
print response
|
||||
self.assertIn('result', response)
|
||||
|
||||
error = response['error']
|
||||
self.assertEqual(error['code'], 0)
|
||||
self.assertEqual(error['message'], 'Application error')
|
||||
|
||||
data = error['data']
|
||||
self.assertEqual(data['type'], 'ValueError')
|
||||
self.assertIn('not in list', data['message'])
|
||||
self.assertIn('traceback', data)
|
||||
self.assertIn('Traceback (most recent call last):', data['traceback'])
|
||||
result = response['result']
|
||||
self.assertEqual(result, None)
|
||||
|
||||
def test_missing_jsonrpc_member_causes_invalid_request_error(self):
|
||||
request = {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user