Merge pull request #252 from jodal/feature/playback-cleanup

core: Playback cleanup
This commit is contained in:
Thomas Adamcik 2012-11-20 12:54:46 -08:00
commit 52d643ed51
8 changed files with 54 additions and 81 deletions

View File

@ -149,6 +149,18 @@ backends:
This makes it possible to support lookup of artist or album URIs which then
can expand to a list of tracks.
- Remove :attr:`mopidy.core.PlaybackController.track_at_previous`. Use
:attr:`mopidy.core.PlaybackController.tl_track_at_previous` instead.
- Remove :attr:`mopidy.core.PlaybackController.track_at_next`. Use
:attr:`mopidy.core.PlaybackController.tl_track_at_next` instead.
- Remove :attr:`mopidy.core.PlaybackController.track_at_eot`. Use
:attr:`mopidy.core.PlaybackController.tl_track_at_eot` instead.
- Remove :attr:`mopidy.core.PlaybackController.current_tlid`. Use
:attr:`mopidy.core.PlaybackController.current_tl_track` instead.
- Added support for connecting to the Spotify service through an HTTP or SOCKS
proxy, which is supported by pyspotify >= 1.9.

View File

@ -79,17 +79,6 @@ class PlaybackController(object):
uri_scheme = urlparse.urlparse(uri).scheme
return self.backends.with_playback_by_uri_scheme.get(uri_scheme, None)
def get_current_tlid(self):
return self.current_tl_track and self.current_tl_track.tlid
current_tlid = property(get_current_tlid)
"""
The TLID (tracklist ID) of the currently playing or selected
track.
Read-only. Extracted from :attr:`current_tl_track` for convenience.
"""
def get_current_track(self):
return self.current_tl_track and self.current_tl_track.track
@ -115,17 +104,6 @@ class PlaybackController(object):
Read-only.
"""
def get_track_at_eot(self):
return self.tl_track_at_eot and self.tl_track_at_eot.track
track_at_eot = property(get_track_at_eot)
"""
The track that will be played at the end of the current track.
Read-only. A :class:`mopidy.models.Track` extracted from
:attr:`tl_track_at_eot` for convenience.
"""
def get_tl_track_at_eot(self):
# pylint: disable = R0911
# Too many return statements
@ -168,17 +146,6 @@ class PlaybackController(object):
Not necessarily the same track as :attr:`tl_track_at_next`.
"""
def get_track_at_next(self):
return self.tl_track_at_next and self.tl_track_at_next.track
track_at_next = property(get_track_at_next)
"""
The track that will be played if calling :meth:`next()`.
Read-only. A :class:`mopidy.models.Track` extracted from
:attr:`tl_track_at_next` for convenience.
"""
def get_tl_track_at_next(self):
tl_tracks = self.core.tracklist.tl_tracks
@ -218,17 +185,6 @@ class PlaybackController(object):
before the list repeats.
"""
def get_track_at_previous(self):
return self.tl_track_at_previous and self.tl_track_at_previous.track
track_at_previous = property(get_track_at_previous)
"""
The track that will be played if calling :meth:`previous()`.
Read-only. A :class:`mopidy.models.Track` extracted from
:attr:`tl_track_at_previous` for convenience.
"""
def get_tl_track_at_previous(self):
if self.repeat or self.consume or self.random:
return self.current_tl_track

View File

@ -110,7 +110,8 @@ def deleteid(context, tlid):
Deletes the song ``SONGID`` from the playlist
"""
tlid = int(tlid)
if context.core.playback.current_tlid.get() == tlid:
tl_track = context.core.playback.current_tl_track.get()
if tl_track and tl_track.tlid == tlid:
context.core.playback.next()
tl_tracks = context.core.tracklist.remove(tlid=tlid).get()
if not tl_tracks:

View File

@ -329,9 +329,9 @@ def seek(context, songpos, seconds):
- issues ``seek 1 120`` without quotes around the arguments.
"""
if context.core.playback.tracklist_position != songpos:
if context.core.playback.tracklist_position.get() != songpos:
playpos(context, songpos)
context.core.playback.seek(int(seconds) * 1000)
context.core.playback.seek(int(seconds) * 1000).get()
@handle_request(r'^seekid "(?P<tlid>\d+)" "(?P<seconds>\d+)"$')
@ -343,9 +343,10 @@ def seekid(context, tlid, seconds):
Seeks to the position ``TIME`` (in seconds) of song ``SONGID``.
"""
if context.core.playback.current_tlid != tlid:
tl_track = context.core.playback.current_tl_track.get()
if not tl_track or tl_track.tlid != tlid:
playid(context, tlid)
context.core.playback.seek(int(seconds) * 1000)
context.core.playback.seek(int(seconds) * 1000).get()
@handle_request(r'^setvol (?P<volume>[-+]*\d+)$')

View File

@ -419,8 +419,8 @@ class MprisObject(dbus.service.Object):
if not self.get_CanControl():
return False
return (
self.core.playback.current_track.get() is not None or
self.core.playback.track_at_next.get() is not None)
self.core.playback.current_tl_track.get() is not None or
self.core.playback.tl_track_at_next.get() is not None)
def get_CanPause(self):
if not self.get_CanControl():

View File

@ -3,8 +3,9 @@ from __future__ import unicode_literals
def populate_tracklist(func):
def wrapper(self):
self.tl_tracks = []
for track in self.tracks:
self.core.tracklist.add(track)
self.tl_tracks.append(self.core.tracklist.add(track))
return func(self)
wrapper.__name__ = func.__name__

View File

@ -234,29 +234,29 @@ class PlaybackControllerTest(object):
@populate_tracklist
def test_next_track_before_play(self):
self.assertEqual(self.playback.track_at_next, self.tracks[0])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[0])
@populate_tracklist
def test_next_track_during_play(self):
self.playback.play()
self.assertEqual(self.playback.track_at_next, self.tracks[1])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[1])
@populate_tracklist
def test_next_track_after_previous(self):
self.playback.play()
self.playback.next()
self.playback.previous()
self.assertEqual(self.playback.track_at_next, self.tracks[1])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[1])
def test_next_track_empty_playlist(self):
self.assertEqual(self.playback.track_at_next, None)
self.assertEqual(self.playback.tl_track_at_next, None)
@populate_tracklist
def test_next_track_at_end_of_playlist(self):
self.playback.play()
for _ in self.tracklist.tl_tracks[1:]:
self.playback.next()
self.assertEqual(self.playback.track_at_next, None)
self.assertEqual(self.playback.tl_track_at_next, None)
@populate_tracklist
def test_next_track_at_end_of_playlist_with_repeat(self):
@ -264,13 +264,13 @@ class PlaybackControllerTest(object):
self.playback.play()
for _ in self.tracks[1:]:
self.playback.next()
self.assertEqual(self.playback.track_at_next, self.tracks[0])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[0])
@populate_tracklist
def test_next_track_with_random(self):
random.seed(1)
self.playback.random = True
self.assertEqual(self.playback.track_at_next, self.tracks[2])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[2])
@populate_tracklist
def test_next_with_consume(self):
@ -300,9 +300,9 @@ class PlaybackControllerTest(object):
def test_next_track_with_random_after_append_playlist(self):
random.seed(1)
self.playback.random = True
self.assertEqual(self.playback.track_at_next, self.tracks[2])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[2])
self.tracklist.append(self.tracks[:1])
self.assertEqual(self.playback.track_at_next, self.tracks[1])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[1])
@populate_tracklist
def test_end_of_track(self):
@ -370,29 +370,29 @@ class PlaybackControllerTest(object):
@populate_tracklist
def test_end_of_track_track_before_play(self):
self.assertEqual(self.playback.track_at_next, self.tracks[0])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[0])
@populate_tracklist
def test_end_of_track_track_during_play(self):
self.playback.play()
self.assertEqual(self.playback.track_at_next, self.tracks[1])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[1])
@populate_tracklist
def test_end_of_track_track_after_previous(self):
self.playback.play()
self.playback.on_end_of_track()
self.playback.previous()
self.assertEqual(self.playback.track_at_next, self.tracks[1])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[1])
def test_end_of_track_track_empty_playlist(self):
self.assertEqual(self.playback.track_at_next, None)
self.assertEqual(self.playback.tl_track_at_next, None)
@populate_tracklist
def test_end_of_track_track_at_end_of_playlist(self):
self.playback.play()
for _ in self.tracklist.tl_tracks[1:]:
self.playback.on_end_of_track()
self.assertEqual(self.playback.track_at_next, None)
self.assertEqual(self.playback.tl_track_at_next, None)
@populate_tracklist
def test_end_of_track_track_at_end_of_playlist_with_repeat(self):
@ -400,13 +400,13 @@ class PlaybackControllerTest(object):
self.playback.play()
for _ in self.tracks[1:]:
self.playback.on_end_of_track()
self.assertEqual(self.playback.track_at_next, self.tracks[0])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[0])
@populate_tracklist
def test_end_of_track_track_with_random(self):
random.seed(1)
self.playback.random = True
self.assertEqual(self.playback.track_at_next, self.tracks[2])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[2])
@populate_tracklist
def test_end_of_track_with_consume(self):
@ -428,24 +428,24 @@ class PlaybackControllerTest(object):
def test_end_of_track_track_with_random_after_append_playlist(self):
random.seed(1)
self.playback.random = True
self.assertEqual(self.playback.track_at_next, self.tracks[2])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[2])
self.tracklist.append(self.tracks[:1])
self.assertEqual(self.playback.track_at_next, self.tracks[1])
self.assertEqual(self.playback.tl_track_at_next, self.tl_tracks[1])
@populate_tracklist
def test_previous_track_before_play(self):
self.assertEqual(self.playback.track_at_previous, None)
self.assertEqual(self.playback.tl_track_at_previous, None)
@populate_tracklist
def test_previous_track_after_play(self):
self.playback.play()
self.assertEqual(self.playback.track_at_previous, None)
self.assertEqual(self.playback.tl_track_at_previous, None)
@populate_tracklist
def test_previous_track_after_next(self):
self.playback.play()
self.playback.next()
self.assertEqual(self.playback.track_at_previous, self.tracks[0])
self.assertEqual(self.playback.tl_track_at_previous, self.tl_tracks[0])
@populate_tracklist
def test_previous_track_after_previous(self):
@ -453,10 +453,10 @@ class PlaybackControllerTest(object):
self.playback.next() # At track 1
self.playback.next() # At track 2
self.playback.previous() # At track 1
self.assertEqual(self.playback.track_at_previous, self.tracks[0])
self.assertEqual(self.playback.tl_track_at_previous, self.tl_tracks[0])
def test_previous_track_empty_playlist(self):
self.assertEqual(self.playback.track_at_previous, None)
self.assertEqual(self.playback.tl_track_at_previous, None)
@populate_tracklist
def test_previous_track_with_consume(self):
@ -464,7 +464,8 @@ class PlaybackControllerTest(object):
for _ in self.tracks:
self.playback.next()
self.assertEqual(
self.playback.track_at_previous, self.playback.current_track)
self.playback.tl_track_at_previous,
self.playback.current_tl_track)
@populate_tracklist
def test_previous_track_with_random(self):
@ -472,7 +473,8 @@ class PlaybackControllerTest(object):
for _ in self.tracks:
self.playback.next()
self.assertEqual(
self.playback.track_at_previous, self.playback.current_track)
self.playback.tl_track_at_previous,
self.playback.current_tl_track)
@populate_tracklist
def test_initial_current_track(self):
@ -830,14 +832,14 @@ class PlaybackControllerTest(object):
self.playback.play()
for _ in self.tracks[1:]:
self.playback.next()
self.assertEqual(self.playback.track_at_next, None)
self.assertEqual(self.playback.tl_track_at_next, None)
@populate_tracklist
def test_random_until_end_of_playlist_and_play_from_start(self):
self.playback.repeat = True
for _ in self.tracks:
self.playback.next()
self.assertNotEqual(self.playback.track_at_next, None)
self.assertNotEqual(self.playback.tl_track_at_next, None)
self.assertEqual(self.playback.state, PlaybackState.STOPPED)
self.playback.play()
self.assertEqual(self.playback.state, PlaybackState.PLAYING)
@ -849,7 +851,7 @@ class PlaybackControllerTest(object):
self.playback.play()
for _ in self.tracks:
self.playback.next()
self.assertNotEqual(self.playback.track_at_next, None)
self.assertNotEqual(self.playback.tl_track_at_next, None)
@populate_tracklist
def test_played_track_during_random_not_played_again(self):

View File

@ -424,7 +424,7 @@ class PlaybackControlHandlerTest(protocol.BaseTestCase):
[Track(uri='dummy:a', length=40000), seek_track])
self.sendRequest('seekid "1" "30"')
self.assertEqual(1, self.core.playback.current_tlid.get())
self.assertEqual(1, self.core.playback.current_tl_track.get().tlid)
self.assertEqual(seek_track, self.core.playback.current_track.get())
self.assertInResponse('OK')