Implement setting of LoopStatus

This commit is contained in:
Stein Magnus Jodal 2011-06-05 14:13:12 +02:00
parent 9c0e139c17
commit e407d8a4bb
2 changed files with 28 additions and 3 deletions

View File

@ -114,8 +114,7 @@ class MprisObject(dbus.service.Object):
def _get_player_iface_properties(self):
return {
'PlaybackStatus': (self.get_PlaybackStatus, None),
# TODO Set loop status
'LoopStatus': (self.get_LoopStatus, None),
'LoopStatus': (self.get_LoopStatus, self.set_LoopStatus),
'Rate': (1.0, None),
# TODO Get/set backend.playback.random
'Shuffle': (False, None),
@ -241,8 +240,8 @@ class MprisObject(dbus.service.Object):
return 'Stopped'
def get_LoopStatus(self):
single = self.backend.playback.single.get()
repeat = self.backend.playback.repeat.get()
single = self.backend.playback.single.get()
if not repeat:
return 'None'
else:
@ -251,6 +250,17 @@ class MprisObject(dbus.service.Object):
else:
return 'Playlist'
def set_LoopStatus(self, value):
if value == 'None':
self.backend.playback.repeat = False
self.backend.playback.single = False
elif value == 'Track':
self.backend.playback.repeat = True
self.backend.playback.single = True
elif value == 'Playlist':
self.backend.playback.repeat = True
self.backend.playback.single = False
@dbus.service.method(dbus_interface=PLAYER_IFACE)
def Next(self):
logger.debug(u'%s.Next called', PLAYER_IFACE)

View File

@ -56,6 +56,21 @@ class PlayerInterfaceTest(unittest.TestCase):
result = self.mpris_object.Get(mpris.PLAYER_IFACE, 'LoopStatus')
self.assertEqual('Playlist', result)
def test_set_loop_status_to_none_unsets_repeat_and_single(self):
self.mpris_object.Set(mpris.PLAYER_IFACE, 'LoopStatus', 'None')
self.assertEquals(self.backend.playback.repeat.get(), False)
self.assertEquals(self.backend.playback.single.get(), False)
def test_set_loop_status_to_track_sets_repeat_and_single(self):
self.mpris_object.Set(mpris.PLAYER_IFACE, 'LoopStatus', 'Track')
self.assertEquals(self.backend.playback.repeat.get(), True)
self.assertEquals(self.backend.playback.single.get(), True)
def test_set_loop_status_to_playlists_sets_repeat_and_not_single(self):
self.mpris_object.Set(mpris.PLAYER_IFACE, 'LoopStatus', 'Playlist')
self.assertEquals(self.backend.playback.repeat.get(), True)
self.assertEquals(self.backend.playback.single.get(), False)
def test_next_when_playing_should_skip_to_next_track_and_keep_playing(self):
self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')])
self.backend.playback.play()