Merge branch 'master' into gstreamer

This commit is contained in:
Stein Magnus Jodal 2010-08-13 12:37:54 +02:00
commit 51c83dfddd
5 changed files with 45 additions and 9 deletions

View File

@ -23,6 +23,8 @@ Another great release.
- Split gigantic protocol implementation into eleven modules.
- Search improvements, including support for multi-word search.
- Fixed ``play "-1"`` and ``playid "-1"`` behaviour when playlist is empty.
- Support ``plchanges "-1"`` to work better with MPDroid.
- Support ``pause`` without arguments to work better with MPDroid.
- Backend API:

View File

@ -257,7 +257,7 @@ def playlistsearch(frontend, tag, needle):
"""
raise MpdNotImplemented # TODO
@handle_pattern(r'^plchanges "(?P<version>\d+)"$')
@handle_pattern(r'^plchanges "(?P<version>-?\d+)"$')
def plchanges(frontend, version):
"""
*musicpd.org, current playlist section:*
@ -268,6 +268,10 @@ def plchanges(frontend, version):
To detect songs that were deleted at the end of the playlist, use
``playlistlength`` returned by status command.
*MPDroid:*
- Calls ``plchanges "-1"`` two times per second to get the entire playlist.
"""
# XXX Naive implementation that returns all tracks as changed
if int(version) < frontend.backend.current_playlist.version:

View File

@ -86,16 +86,28 @@ def next_(frontend):
"""
return frontend.backend.playback.next()
@handle_pattern(r'^pause$')
@handle_pattern(r'^pause "(?P<state>[01])"$')
def pause(frontend, state):
def pause(frontend, state=None):
"""
*musicpd.org, playback section:*
``pause {PAUSE}``
Toggles pause/resumes playing, ``PAUSE`` is 0 or 1.
*MPDroid:*
- Calls ``pause`` without any arguments to toogle pause.
"""
if int(state):
if state is None:
if (frontend.backend.playback.state ==
frontend.backend.playback.PLAYING):
frontend.backend.playback.pause()
elif (frontend.backend.playback.state ==
frontend.backend.playback.PAUSED):
frontend.backend.playback.resume()
elif int(state):
frontend.backend.playback.pause()
else:
frontend.backend.playback.resume()

View File

@ -321,6 +321,15 @@ class CurrentPlaylistHandlerTest(unittest.TestCase):
self.assert_(u'Title: c' in result)
self.assert_(u'OK' in result)
def test_plchanges_with_minus_one_returns_entire_playlist(self):
self.b.current_playlist.load(
[Track(name='a'), Track(name='b'), Track(name='c')])
result = self.h.handle_request(u'plchanges "-1"')
self.assert_(u'Title: a' in result)
self.assert_(u'Title: b' in result)
self.assert_(u'Title: c' in result)
self.assert_(u'OK' in result)
def test_plchangesposid(self):
self.b.current_playlist.load([Track(), Track(), Track()])
result = self.h.handle_request(u'plchangesposid "0"')

View File

@ -136,8 +136,7 @@ class PlaybackControlHandlerTest(unittest.TestCase):
self.assert_(u'OK' in result)
def test_pause_off(self):
track = Track()
self.b.current_playlist.load([track])
self.b.current_playlist.load([Track()])
self.h.handle_request(u'play "0"')
self.h.handle_request(u'pause "1"')
result = self.h.handle_request(u'pause "0"')
@ -145,16 +144,26 @@ class PlaybackControlHandlerTest(unittest.TestCase):
self.assertEqual(self.b.playback.PLAYING, self.b.playback.state)
def test_pause_on(self):
track = Track()
self.b.current_playlist.load([track])
self.b.current_playlist.load([Track()])
self.h.handle_request(u'play "0"')
result = self.h.handle_request(u'pause "1"')
self.assert_(u'OK' in result)
self.assertEqual(self.b.playback.PAUSED, self.b.playback.state)
def test_pause_toggle(self):
self.b.current_playlist.load([Track()])
result = self.h.handle_request(u'play "0"')
self.assert_(u'OK' in result)
self.assertEqual(self.b.playback.PLAYING, self.b.playback.state)
result = self.h.handle_request(u'pause')
self.assert_(u'OK' in result)
self.assertEqual(self.b.playback.PAUSED, self.b.playback.state)
result = self.h.handle_request(u'pause')
self.assert_(u'OK' in result)
self.assertEqual(self.b.playback.PLAYING, self.b.playback.state)
def test_play_without_pos(self):
track = Track()
self.b.current_playlist.load([track])
self.b.current_playlist.load([Track()])
self.b.playback.state = self.b.playback.PAUSED
result = self.h.handle_request(u'play')
self.assert_(u'OK' in result)