CurrentPlaylistController.tracks is now read-only

This commit is contained in:
Stein Magnus Jodal 2010-06-30 21:27:23 +02:00
parent 81503df2ad
commit e6843e8b4d
3 changed files with 31 additions and 22 deletions

View File

@ -33,10 +33,12 @@ We got an updated :doc:`release roadmap <development/roadmap>`!
lists of :class:`mopidy.models.Track` instead of
:class:`mopidy.models.Playlist`, as none of the other fields on the
``Playlist`` model was in use.
- :meth:`mopidy.backends.BaseCurrentPlaylistController.remove()`` now takes
- :meth:`mopidy.backends.BaseCurrentPlaylistController.remove()` now takes
criterias, just like
:meth:`mopidy.backends.BaseCurrentPlaylistController.get()``, instead of
:meth:`mopidy.backends.BaseCurrentPlaylistController.get()`, instead of
the track to remove.
- :attr:`mopidy.backends.BaseCurrentPlaylistController.tracks` is now
read-only. Use the methods to change its contents.
0.1.0a2 (2010-06-02)

View File

@ -96,12 +96,23 @@ class BaseCurrentPlaylistController(object):
@property
def tracks(self):
"""List of :class:`mopidy.model.Track` in the current playlist."""
"""
List of :class:`mopidy.model.Track` in the current playlist.
Read-only.
"""
return copy(self._tracks)
@tracks.setter
def tracks(self, new_tracks):
self._tracks = copy(new_tracks)
def __set_tracks(self, tracks):
self._tracks = copy(tracks)
self.version += 1
def __clear_tracks(self):
self._tracks = []
self.version += 1
def __remove_track(self, position):
del self._tracks[position]
self.version += 1
def add(self, track, at_position=None):
@ -115,21 +126,19 @@ class BaseCurrentPlaylistController(object):
:type at_position: int or :class:`None`
"""
tracks = self.tracks
assert at_position <= len(tracks), 'at_position can not be greater' \
+ ' than playlist length'
assert at_position <= len(tracks), \
u'at_position can not be greater than playlist length'
if at_position is not None:
tracks.insert(at_position, track)
else:
tracks.append(track)
self.tracks = tracks
self.__set_tracks(tracks)
def clear(self):
"""Clear the current playlist."""
self.backend.playback.stop()
self.backend.playback.current_track = None
self.tracks = []
self.__clear_tracks()
def get(self, **criteria):
"""
@ -166,7 +175,7 @@ class BaseCurrentPlaylistController(object):
:param tracks: tracks to load
:type tracks: list of :class:`mopidy.models.Track`
"""
self.tracks = []
self.__clear_tracks()
for track in tracks:
self.add(track)
self.backend.playback.new_playlist_loaded_callback()
@ -198,7 +207,7 @@ class BaseCurrentPlaylistController(object):
for track in tracks[start:end]:
new_tracks.insert(to_position, track)
to_position += 1
self.tracks = new_tracks
self.__set_tracks(new_tracks)
def remove(self, **criteria):
"""
@ -211,11 +220,8 @@ class BaseCurrentPlaylistController(object):
:type track: :class:`mopidy.models.Track`
"""
track = self.get(**criteria)
tracks = self.tracks
assert track in tracks, 'track must be in playlist'
position = tracks.index(track)
del tracks[position]
self.tracks = tracks
position = self.tracks.index(track)
self.__remove_track(position)
def shuffle(self, start=None, end=None):
"""
@ -243,7 +249,8 @@ class BaseCurrentPlaylistController(object):
shuffled = tracks[start:end]
after = tracks[end or len(tracks):]
random.shuffle(shuffled)
self.tracks = before + shuffled + after
self.__set_tracks(before + shuffled + after)
self.version += 1
def destroy(self):
"""Cleanup after component."""

View File

@ -297,8 +297,8 @@ class BaseCurrentPlaylistControllerTest(object):
def test_version(self):
version = self.controller.version
self.controller.tracks = []
self.assertEqual(self.controller.version, version + 1)
self.controller.load([])
self.assert_(version < self.controller.version)
class BasePlaybackControllerTest(object):