core: Add tlid argument to index calls.
Should save clients from having to pass tl_track models around.
This commit is contained in:
parent
5acc3ea564
commit
6a7005be1e
@ -200,19 +200,32 @@ class TracklistController(object):
|
||||
|
||||
# Methods
|
||||
|
||||
def index(self, tl_track):
|
||||
def index(self, tl_track=None, tlid=None):
|
||||
"""
|
||||
The position of the given track in the tracklist.
|
||||
|
||||
:param tl_track: the track to find the index of
|
||||
:type tl_track: :class:`mopidy.models.TlTrack` or :class:`None`
|
||||
:param tlid: of the track to find the index of
|
||||
:type tlid: TLID number or :class:`None`
|
||||
:rtype: :class:`int` or :class:`None`
|
||||
|
||||
.. versionchanged:: 1.1
|
||||
Added the *tlid* parameter
|
||||
"""
|
||||
tl_track is None or validation.check_instance(tl_track, TlTrack)
|
||||
try:
|
||||
return self._tl_tracks.index(tl_track)
|
||||
except ValueError:
|
||||
return None
|
||||
tlid is None or validation.check_integer(tlid, min=0)
|
||||
|
||||
if tl_track is not None:
|
||||
try:
|
||||
return self._tl_tracks.index(tl_track)
|
||||
except ValueError:
|
||||
pass
|
||||
elif tlid is not None:
|
||||
for i, tl_track in enumerate(self._tl_tracks):
|
||||
if tl_track.tlid == tlid:
|
||||
return i
|
||||
return None
|
||||
|
||||
def eot_track(self, tl_track):
|
||||
"""
|
||||
|
||||
@ -5,7 +5,7 @@ import unittest
|
||||
import mock
|
||||
|
||||
from mopidy import backend, core
|
||||
from mopidy.models import Track
|
||||
from mopidy.models import TlTrack, Track
|
||||
from mopidy.utils import deprecation
|
||||
|
||||
|
||||
@ -102,3 +102,55 @@ class TracklistTest(unittest.TestCase):
|
||||
self.core.tracklist.filter({'uri': 'a'})
|
||||
|
||||
# TODO Extract tracklist tests from the local backend tests
|
||||
|
||||
|
||||
class TracklistIndexTest(unittest.TestCase):
|
||||
|
||||
def setUp(self): # noqa: N802
|
||||
self.tracks = [
|
||||
Track(uri='dummy1:a', name='foo'),
|
||||
Track(uri='dummy1:b', name='foo'),
|
||||
Track(uri='dummy1:c', name='bar'),
|
||||
]
|
||||
|
||||
def lookup(uris):
|
||||
return {u: [t for t in self.tracks if t.uri == u] for u in uris}
|
||||
|
||||
self.core = core.Core(mixer=None, backends=[])
|
||||
self.core.library.lookup = mock.Mock()
|
||||
self.core.library.lookup.side_effect = lookup
|
||||
|
||||
self.tl_tracks = self.core.tracklist.add(uris=[
|
||||
t.uri for t in self.tracks])
|
||||
|
||||
def test_index_returns_index_of_track(self):
|
||||
self.assertEqual(0, self.core.tracklist.index(self.tl_tracks[0]))
|
||||
self.assertEqual(1, self.core.tracklist.index(self.tl_tracks[1]))
|
||||
self.assertEqual(2, self.core.tracklist.index(self.tl_tracks[2]))
|
||||
|
||||
def test_index_returns_none_if_item_not_found(self):
|
||||
tl_track = TlTrack(0, Track())
|
||||
self.assertEqual(self.core.tracklist.index(tl_track), None)
|
||||
|
||||
def test_index_returns_none_if_called_with_none(self):
|
||||
self.assertEqual(self.core.tracklist.index(None), None)
|
||||
|
||||
def test_index_errors_out_for_invalid_tltrack(self):
|
||||
with self.assertRaises(ValueError):
|
||||
self.core.tracklist.index('abc')
|
||||
|
||||
def test_index_return_index_when_called_with_tlids(self):
|
||||
tl_tracks = self.tl_tracks
|
||||
self.assertEqual(0, self.core.tracklist.index(tlid=tl_tracks[0].tlid))
|
||||
self.assertEqual(1, self.core.tracklist.index(tlid=tl_tracks[1].tlid))
|
||||
self.assertEqual(2, self.core.tracklist.index(tlid=tl_tracks[2].tlid))
|
||||
|
||||
def test_index_returns_none_if_tlid_not_found(self):
|
||||
self.assertEqual(self.core.tracklist.index(tlid=123), None)
|
||||
|
||||
def test_index_returns_none_if_called_with_tlid_none(self):
|
||||
self.assertEqual(self.core.tracklist.index(tlid=None), None)
|
||||
|
||||
def test_index_errors_out_for_invalid_tlid(self):
|
||||
with self.assertRaises(ValueError):
|
||||
self.core.tracklist.index(tlid=-1)
|
||||
|
||||
@ -8,7 +8,7 @@ import pykka
|
||||
from mopidy import core
|
||||
from mopidy.core import PlaybackState
|
||||
from mopidy.local import actor
|
||||
from mopidy.models import Playlist, TlTrack, Track
|
||||
from mopidy.models import Playlist, Track
|
||||
from mopidy.utils import deprecation
|
||||
|
||||
from tests import dummy_audio, path_to_data_dir
|
||||
@ -176,16 +176,6 @@ class LocalTracklistProviderTest(unittest.TestCase):
|
||||
tl_tracks = self.controller.add(self.controller.tracks[1:2])
|
||||
self.assertEqual(tl_tracks[0].track, self.controller.tracks[1])
|
||||
|
||||
def test_index_returns_index_of_track(self):
|
||||
tl_tracks = self.controller.add(self.tracks)
|
||||
self.assertEqual(0, self.controller.index(tl_tracks[0]))
|
||||
self.assertEqual(1, self.controller.index(tl_tracks[1]))
|
||||
self.assertEqual(2, self.controller.index(tl_tracks[2]))
|
||||
|
||||
def test_index_returns_none_if_item_not_found(self):
|
||||
tl_track = TlTrack(0, Track())
|
||||
self.assertEqual(self.controller.index(tl_track), None)
|
||||
|
||||
@populate_tracklist
|
||||
def test_move_single(self):
|
||||
self.controller.move(0, 0, 2)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user