Test and implement mpris.SetPosition()
This commit is contained in:
parent
4404e34a79
commit
5d1da4eeaf
@ -281,11 +281,18 @@ class MprisObject(dbus.service.Object):
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
def SetPosition(self, track_id, position):
|
||||
logger.debug(u'%s.SetPosition called', PLAYER_IFACE)
|
||||
# TODO Pseudo code:
|
||||
# if track_id != playback.current_track.track_id: return
|
||||
# if not 0 <= position <= playback.current_track.length: return
|
||||
# playback.seek(position)
|
||||
pass
|
||||
position = position // 1000
|
||||
current_track = self.backend.playback.current_track.get()
|
||||
# TODO Currently the ID is assumed to be the URI of the track. This
|
||||
# should be changed to a D-Bus object ID than can be mapped to the CPID
|
||||
# and URI of the track.
|
||||
if current_track and current_track.uri != track_id:
|
||||
return
|
||||
if position < 0:
|
||||
return
|
||||
if current_track and current_track.length < position:
|
||||
return
|
||||
self.backend.playback.seek(position)
|
||||
|
||||
@dbus.service.method(dbus_interface=PLAYER_IFACE)
|
||||
def OpenUri(self, uri):
|
||||
|
||||
@ -311,3 +311,92 @@ class PlayerInterfaceTest(unittest.TestCase):
|
||||
after_seek = self.backend.playback.time_position.get()
|
||||
self.assert_(after_seek >= 0)
|
||||
self.assert_(after_seek < before_seek)
|
||||
|
||||
def test_set_position_sets_the_current_track_position_in_microsecs(self):
|
||||
self.backend.current_playlist.append([Track(uri='a', length=40000)])
|
||||
self.backend.playback.play()
|
||||
|
||||
before_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(before_set_position <= 5000)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
|
||||
track_id = 'a'
|
||||
|
||||
position_to_set_in_milliseconds = 20000
|
||||
position_to_set_in_microseconds = position_to_set_in_milliseconds * 1000
|
||||
|
||||
self.mpris.SetPosition(track_id, position_to_set_in_microseconds)
|
||||
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
|
||||
after_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(after_set_position >= position_to_set_in_milliseconds)
|
||||
|
||||
def test_set_position_does_nothing_if_the_position_is_negative(self):
|
||||
self.backend.current_playlist.append([Track(uri='a', length=40000)])
|
||||
self.backend.playback.play()
|
||||
self.backend.playback.seek(20000)
|
||||
|
||||
before_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(before_set_position >= 20000)
|
||||
self.assert_(before_set_position <= 25000)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
self.assertEquals(self.backend.playback.current_track.get().uri, 'a')
|
||||
|
||||
track_id = 'a'
|
||||
|
||||
position_to_set_in_milliseconds = -1000
|
||||
position_to_set_in_microseconds = position_to_set_in_milliseconds * 1000
|
||||
|
||||
self.mpris.SetPosition(track_id, position_to_set_in_microseconds)
|
||||
|
||||
after_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(after_set_position >= before_set_position)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
self.assertEquals(self.backend.playback.current_track.get().uri, 'a')
|
||||
|
||||
def test_set_position_does_nothing_if_position_is_larger_than_track_length(self):
|
||||
self.backend.current_playlist.append([Track(uri='a', length=40000)])
|
||||
self.backend.playback.play()
|
||||
self.backend.playback.seek(20000)
|
||||
|
||||
before_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(before_set_position >= 20000)
|
||||
self.assert_(before_set_position <= 25000)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
self.assertEquals(self.backend.playback.current_track.get().uri, 'a')
|
||||
|
||||
track_id = 'a'
|
||||
|
||||
position_to_set_in_milliseconds = 50000
|
||||
position_to_set_in_microseconds = position_to_set_in_milliseconds * 1000
|
||||
|
||||
self.mpris.SetPosition(track_id, position_to_set_in_microseconds)
|
||||
|
||||
after_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(after_set_position >= before_set_position)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
self.assertEquals(self.backend.playback.current_track.get().uri, 'a')
|
||||
|
||||
def test_set_position_does_nothing_if_track_id_does_not_match_current_track(self):
|
||||
self.backend.current_playlist.append([Track(uri='a', length=40000)])
|
||||
self.backend.playback.play()
|
||||
self.backend.playback.seek(20000)
|
||||
|
||||
before_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(before_set_position >= 20000)
|
||||
self.assert_(before_set_position <= 25000)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
self.assertEquals(self.backend.playback.current_track.get().uri, 'a')
|
||||
|
||||
track_id = 'b'
|
||||
|
||||
position_to_set_in_milliseconds = 0
|
||||
position_to_set_in_microseconds = position_to_set_in_milliseconds * 1000
|
||||
|
||||
self.mpris.SetPosition(track_id, position_to_set_in_microseconds)
|
||||
|
||||
after_set_position = self.backend.playback.time_position.get()
|
||||
self.assert_(after_set_position >= before_set_position)
|
||||
self.assertEquals(self.backend.playback.state.get(), PLAYING)
|
||||
self.assertEquals(self.backend.playback.current_track.get().uri, 'a')
|
||||
|
||||
Loading…
Reference in New Issue
Block a user