diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py index 8fdf9c0e..c17b7c19 100644 --- a/mopidy/frontends/mpris.py +++ b/mopidy/frontends/mpris.py @@ -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) diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index e0bbc27f..11823a98 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -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()