mpd: Add 'seekcur' command

This commit is contained in:
Stein Magnus Jodal 2012-12-14 11:51:55 +01:00
parent bac240501b
commit ac537a63c7
3 changed files with 54 additions and 1 deletions

View File

@ -8,7 +8,9 @@ This change log is used to track all major changes to Mopidy.
v0.11.0 (in development)
========================
- No changes yet.
**MPD frontend**
- Add support for ``seekcur`` command added in MPD 0.17.
v0.10.0 (2012-12-12)

View File

@ -349,6 +349,26 @@ def seekid(context, tlid, seconds):
context.core.playback.seek(int(seconds) * 1000).get()
@handle_request(r'^seekcur "(?P<position>\d+)"$')
@handle_request(r'^seekcur "(?P<diff>[-+]\d+)"$')
def seekcur(context, position=None, diff=None):
"""
*musicpd.org, playback section:*
``seekcur {TIME}``
Seeks to the position ``TIME`` within the current song. If prefixed by
'+' or '-', then the time is relative to the current playing position.
"""
if position is not None:
position = int(position) * 1000
context.core.playback.seek(position).get()
elif diff is not None:
position = context.core.playback.time_position.get()
position += int(diff) * 1000
context.core.playback.seek(position).get()
@handle_request(r'^setvol (?P<volume>[-+]*\d+)$')
@handle_request(r'^setvol "(?P<volume>[-+]*\d+)"$')
def setvol(context, volume):

View File

@ -414,6 +414,37 @@ class PlaybackControlHandlerTest(protocol.BaseTestCase):
self.assertEqual(seek_track, self.core.playback.current_track.get())
self.assertInResponse('OK')
def test_seekcur_absolute_value(self):
self.core.tracklist.add([Track(uri='dummy:a', length=40000)])
self.core.playback.play()
self.sendRequest('seekcur "30"')
self.assertGreaterEqual(self.core.playback.time_position.get(), 30000)
self.assertInResponse('OK')
def test_seekcur_positive_diff(self):
self.core.tracklist.add([Track(uri='dummy:a', length=40000)])
self.core.playback.play()
self.core.playback.seek(10000)
self.assertGreaterEqual(self.core.playback.time_position.get(), 10000)
self.sendRequest('seekcur "+20"')
self.assertGreaterEqual(self.core.playback.time_position.get(), 30000)
self.assertInResponse('OK')
def test_seekcur_negative_diff(self):
self.core.tracklist.add([Track(uri='dummy:a', length=40000)])
self.core.playback.play()
self.core.playback.seek(30000)
self.assertGreaterEqual(self.core.playback.time_position.get(), 30000)
self.sendRequest('seekcur "-20"')
self.assertLessEqual(self.core.playback.time_position.get(), 15000)
self.assertInResponse('OK')
def test_stop(self):
self.sendRequest('stop')
self.assertEqual(STOPPED, self.core.playback.state.get())