Fix some missing renames in PlaybackController. Doc changes from singlerepeat branch.
This commit is contained in:
parent
e7291c3d2c
commit
4cfbfbb2d2
@ -72,19 +72,36 @@ greatly improved MPD client support.
|
|||||||
- Relocate from :mod:`mopidy.backends` to :mod:`mopidy.backends.base`.
|
- Relocate from :mod:`mopidy.backends` to :mod:`mopidy.backends.base`.
|
||||||
- The ``id`` field of :class:`mopidy.models.Track` has been removed, as it is
|
- The ``id`` field of :class:`mopidy.models.Track` has been removed, as it is
|
||||||
no longer needed after the CPID refactoring.
|
no longer needed after the CPID refactoring.
|
||||||
|
- :meth:`mopidy.backends.base.BaseBackend()` now accepts an
|
||||||
|
``output_queue`` which it can use to send messages (i.e. audio data)
|
||||||
|
to the output process.
|
||||||
- :meth:`mopidy.backends.base.BaseLibraryController.find_exact()` now accepts
|
- :meth:`mopidy.backends.base.BaseLibraryController.find_exact()` now accepts
|
||||||
keyword arguments of the form ``find_exact(artist=['foo'],
|
keyword arguments of the form ``find_exact(artist=['foo'],
|
||||||
album=['bar'])``.
|
album=['bar'])``.
|
||||||
- :meth:`mopidy.backends.base.BaseLibraryController.search()` now accepts
|
- :meth:`mopidy.backends.base.BaseLibraryController.search()` now accepts
|
||||||
keyword arguments of the form ``search(artist=['foo', 'fighters'],
|
keyword arguments of the form ``search(artist=['foo', 'fighters'],
|
||||||
album=['bar', 'grooves'])``.
|
album=['bar', 'grooves'])``.
|
||||||
- :meth:`mopidy.backends.base.BaseBackend()` now accepts an
|
|
||||||
``output_queue`` which it can use to send messages (i.e. audio data)
|
|
||||||
to the output process.
|
|
||||||
- :meth:`mopidy.backends.base.BaseCurrentPlaylistController.load()` now
|
- :meth:`mopidy.backends.base.BaseCurrentPlaylistController.load()` now
|
||||||
appends to the existing playlist. Use
|
appends to the existing playlist. Use
|
||||||
:meth:`mopidy.backends.base.BaseCurrentPlaylistController.clear()` if you
|
:meth:`mopidy.backends.base.BaseCurrentPlaylistController.clear()` if you
|
||||||
want to clear it first.
|
want to clear it first.
|
||||||
|
- The following fields in
|
||||||
|
:class:`mopidy.backends.base.BasePlaybackController` has been renamed to
|
||||||
|
reflect their relation to methods called on the controller:
|
||||||
|
|
||||||
|
- ``next_track`` to ``track_at_next``
|
||||||
|
- ``next_cp_track`` to ``cp_track_at_next``
|
||||||
|
- ``previous_track`` to ``track_at_previous``
|
||||||
|
- ``previous_cp_track`` to ``cp_track_at_previous``
|
||||||
|
|
||||||
|
- :attr:`mopidy.backends.base.BasePlaybackController.track_at_eot` and
|
||||||
|
:attr:`mopidy.backends.base.BasePlaybackController.cp_track_at_eot` has
|
||||||
|
been added to better handle the difference between the user pressing next
|
||||||
|
and the current track ending.
|
||||||
|
- Rename
|
||||||
|
:meth:`mopidy.backends.base.BasePlaybackController.new_playlist_loaded_callback()`
|
||||||
|
to
|
||||||
|
:meth:`mopidy.backends.base.BasePlaybackController.on_current_playlist_change()`.
|
||||||
|
|
||||||
|
|
||||||
0.1.0a3 (2010-08-03)
|
0.1.0a3 (2010-08-03)
|
||||||
|
|||||||
@ -25,7 +25,7 @@ class BasePlaybackController(object):
|
|||||||
#: Tracks are not removed from the playlist.
|
#: Tracks are not removed from the playlist.
|
||||||
consume = False
|
consume = False
|
||||||
|
|
||||||
#: The currently playing or selected track
|
#: The currently playing or selected track.
|
||||||
#:
|
#:
|
||||||
#: A two-tuple of (CPID integer, :class:`mopidy.models.Track`) or
|
#: A two-tuple of (CPID integer, :class:`mopidy.models.Track`) or
|
||||||
#: :class:`None`.
|
#: :class:`None`.
|
||||||
@ -45,7 +45,8 @@ class BasePlaybackController(object):
|
|||||||
repeat = False
|
repeat = False
|
||||||
|
|
||||||
#: :class:`True`
|
#: :class:`True`
|
||||||
#: Playback is stopped after current song, unless in repeat mode.
|
#: Playback is stopped after current song, unless in :attr:`repeat`
|
||||||
|
#: mode.
|
||||||
#: :class:`False`
|
#: :class:`False`
|
||||||
#: Playback continues after current song.
|
#: Playback continues after current song.
|
||||||
single = False
|
single = False
|
||||||
@ -59,19 +60,32 @@ class BasePlaybackController(object):
|
|||||||
self._play_time_started = None
|
self._play_time_started = None
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
"""Cleanup after component."""
|
"""
|
||||||
|
Cleanup after component.
|
||||||
|
|
||||||
|
May be overridden by subclasses.
|
||||||
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def _get_cpid(self, cp_track):
|
||||||
|
if cp_track is None:
|
||||||
|
return None
|
||||||
|
return cp_track[0]
|
||||||
|
|
||||||
|
def _get_track(self, cp_track):
|
||||||
|
if cp_track is None:
|
||||||
|
return None
|
||||||
|
return cp_track[1]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_cpid(self):
|
def current_cpid(self):
|
||||||
"""
|
"""
|
||||||
The CPID (current playlist ID) of :attr:`current_track`.
|
The CPID (current playlist ID) of the currently playing or selected
|
||||||
|
track.
|
||||||
|
|
||||||
Read-only. Extracted from :attr:`current_cp_track` for convenience.
|
Read-only. Extracted from :attr:`current_cp_track` for convenience.
|
||||||
"""
|
"""
|
||||||
if self.current_cp_track is None:
|
return self._get_cpid(self.current_cp_track)
|
||||||
return None
|
|
||||||
return self.current_cp_track[0]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_track(self):
|
def current_track(self):
|
||||||
@ -80,13 +94,15 @@ class BasePlaybackController(object):
|
|||||||
|
|
||||||
Read-only. Extracted from :attr:`current_cp_track` for convenience.
|
Read-only. Extracted from :attr:`current_cp_track` for convenience.
|
||||||
"""
|
"""
|
||||||
if self.current_cp_track is None:
|
return self._get_track(self.current_cp_track)
|
||||||
return None
|
|
||||||
return self.current_cp_track[1]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def current_playlist_position(self):
|
def current_playlist_position(self):
|
||||||
"""The position of the current track in the current playlist."""
|
"""
|
||||||
|
The position of the current track in the current playlist.
|
||||||
|
|
||||||
|
Read-only.
|
||||||
|
"""
|
||||||
if self.current_cp_track is None:
|
if self.current_cp_track is None:
|
||||||
return None
|
return None
|
||||||
try:
|
try:
|
||||||
@ -96,25 +112,23 @@ class BasePlaybackController(object):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def next_track(self):
|
def track_at_eot(self):
|
||||||
"""
|
"""
|
||||||
The next track in the playlist.
|
The track that will be played at the end of the current track.
|
||||||
|
|
||||||
A :class:`mopidy.models.Track` extracted from :attr:`cp_track_at_next` for
|
Read-only. A :class:`mopidy.models.Track` extracted from
|
||||||
convenience.
|
:attr:`cp_track_at_eot` for convenience.
|
||||||
"""
|
"""
|
||||||
cp_track_at_next = self.cp_track_at_next
|
return self._get_track(self.cp_track_at_eot)
|
||||||
if cp_track_at_next is None:
|
|
||||||
return None
|
|
||||||
return cp_track_at_next[1]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cp_track_at_eot(self):
|
def cp_track_at_eot(self):
|
||||||
"""
|
"""
|
||||||
The next track in the playlist which should be played when
|
The track that will be played at the end of the current track.
|
||||||
we get an end of track event, such as when a track is finished playing.
|
|
||||||
|
|
||||||
A two-tuple of (CPID integer, :class:`mopidy.models.Track`).
|
Read-only. A two-tuple of (CPID integer, :class:`mopidy.models.Track`).
|
||||||
|
|
||||||
|
Not necessarily the same track as :attr:`cp_track_at_next`.
|
||||||
"""
|
"""
|
||||||
cp_tracks = self.backend.current_playlist.cp_tracks
|
cp_tracks = self.backend.current_playlist.cp_tracks
|
||||||
|
|
||||||
@ -147,13 +161,22 @@ class BasePlaybackController(object):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def track_at_next(self):
|
||||||
|
"""
|
||||||
|
The track that will be played if calling :meth:`next()`.
|
||||||
|
|
||||||
|
Read-only. A :class:`mopidy.models.Track` extracted from
|
||||||
|
:attr:`cp_track_at_next` for convenience.
|
||||||
|
"""
|
||||||
|
return self._get_track(self.cp_track_at_next)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def cp_track_at_next(self):
|
def cp_track_at_next(self):
|
||||||
"""
|
"""
|
||||||
The next track in the playlist which should be played when we get a
|
The track that will be played if calling :meth:`next()`.
|
||||||
event, such as a user clicking the next button.
|
|
||||||
|
|
||||||
A two-tuple of (CPID integer, :class:`mopidy.models.Track`).
|
Read-only. A two-tuple of (CPID integer, :class:`mopidy.models.Track`).
|
||||||
|
|
||||||
For normal playback this is the next track in the playlist. If repeat
|
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
|
is enabled the next track can loop around the playlist. When random is
|
||||||
@ -188,22 +211,19 @@ class BasePlaybackController(object):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def previous_track(self):
|
def track_at_previous(self):
|
||||||
"""
|
"""
|
||||||
The previous track in the playlist.
|
The track that will be played if calling :meth:`previous()`.
|
||||||
|
|
||||||
A :class:`mopidy.models.Track` extracted from :attr:`previous_cp_track`
|
Read-only. A :class:`mopidy.models.Track` extracted from
|
||||||
for convenience.
|
:attr:`cp_track_at_previous` for convenience.
|
||||||
"""
|
"""
|
||||||
previous_cp_track = self.previous_cp_track
|
return self._get_track(self.cp_track_at_previous)
|
||||||
if previous_cp_track is None:
|
|
||||||
return None
|
|
||||||
return previous_cp_track[1]
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def previous_cp_track(self):
|
def cp_track_at_previous(self):
|
||||||
"""
|
"""
|
||||||
The previous track in the playlist.
|
The track that will be played if calling :meth:`previous()`.
|
||||||
|
|
||||||
A two-tuple of (CPID integer, :class:`mopidy.models.Track`).
|
A two-tuple of (CPID integer, :class:`mopidy.models.Track`).
|
||||||
|
|
||||||
@ -337,11 +357,18 @@ class BasePlaybackController(object):
|
|||||||
self.state = self.PAUSED
|
self.state = self.PAUSED
|
||||||
|
|
||||||
def _pause(self):
|
def _pause(self):
|
||||||
|
"""
|
||||||
|
To be overridden by subclass. Implement your backend's pause
|
||||||
|
functionality here.
|
||||||
|
|
||||||
|
:rtype: :class:`True` if successful, else :class:`False`
|
||||||
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def play(self, cp_track=None, on_error_step=1):
|
def play(self, cp_track=None, on_error_step=1):
|
||||||
"""
|
"""
|
||||||
Play the given track or the currently active track.
|
Play the given track, or if the given track is :class:`None`, play the
|
||||||
|
currently active track.
|
||||||
|
|
||||||
:param cp_track: track to play
|
:param cp_track: track to play
|
||||||
:type cp_track: two-tuple (CPID integer, :class:`mopidy.models.Track`)
|
:type cp_track: two-tuple (CPID integer, :class:`mopidy.models.Track`)
|
||||||
@ -371,15 +398,24 @@ class BasePlaybackController(object):
|
|||||||
self._shuffled.remove(self.current_cp_track)
|
self._shuffled.remove(self.current_cp_track)
|
||||||
|
|
||||||
def _play(self, track):
|
def _play(self, track):
|
||||||
|
"""
|
||||||
|
To be overridden by subclass. Implement your backend's play
|
||||||
|
functionality here.
|
||||||
|
|
||||||
|
:param track: the track to play
|
||||||
|
:type track: :class:`mopidy.models.Track`
|
||||||
|
:rtype: :class:`True` if successful, else :class:`False`
|
||||||
|
"""
|
||||||
|
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def previous(self):
|
def previous(self):
|
||||||
"""Play the previous track."""
|
"""Play the previous track."""
|
||||||
if self.previous_cp_track is None:
|
if self.cp_track_at_previous is None:
|
||||||
return
|
return
|
||||||
if self.state == self.STOPPED:
|
if self.state == self.STOPPED:
|
||||||
return
|
return
|
||||||
self.play(self.previous_cp_track, on_error_step=-1)
|
self.play(self.cp_track_at_previous, on_error_step=-1)
|
||||||
|
|
||||||
def resume(self):
|
def resume(self):
|
||||||
"""If paused, resume playing the current track."""
|
"""If paused, resume playing the current track."""
|
||||||
@ -387,6 +423,12 @@ class BasePlaybackController(object):
|
|||||||
self.state = self.PLAYING
|
self.state = self.PLAYING
|
||||||
|
|
||||||
def _resume(self):
|
def _resume(self):
|
||||||
|
"""
|
||||||
|
To be overridden by subclass. Implement your backend's resume
|
||||||
|
functionality here.
|
||||||
|
|
||||||
|
:rtype: :class:`True` if successful, else :class:`False`
|
||||||
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def seek(self, time_position):
|
def seek(self, time_position):
|
||||||
@ -413,6 +455,14 @@ class BasePlaybackController(object):
|
|||||||
self._seek(time_position)
|
self._seek(time_position)
|
||||||
|
|
||||||
def _seek(self, time_position):
|
def _seek(self, time_position):
|
||||||
|
"""
|
||||||
|
To be overridden by subclass. Implement your backend's seek
|
||||||
|
functionality here.
|
||||||
|
|
||||||
|
:param time_position: time position in milliseconds
|
||||||
|
:type time_position: int
|
||||||
|
:rtype: :class:`True` if successful, else :class:`False`
|
||||||
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
@ -421,4 +471,10 @@ class BasePlaybackController(object):
|
|||||||
self.state = self.STOPPED
|
self.state = self.STOPPED
|
||||||
|
|
||||||
def _stop(self):
|
def _stop(self):
|
||||||
|
"""
|
||||||
|
To be overridden by subclass. Implement your backend's stop
|
||||||
|
functionality here.
|
||||||
|
|
||||||
|
:rtype: :class:`True` if successful, else :class:`False`
|
||||||
|
"""
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user