diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py index ec711713..95ce9bcd 100644 --- a/mopidy/frontends/mpris.py +++ b/mopidy/frontends/mpris.py @@ -116,8 +116,7 @@ class MprisObject(dbus.service.Object): 'PlaybackStatus': (self.get_PlaybackStatus, None), 'LoopStatus': (self.get_LoopStatus, self.set_LoopStatus), 'Rate': (1.0, self.set_Rate), - # TODO Get/set backend.playback.random - 'Shuffle': (False, None), + 'Shuffle': (self.get_Shuffle, self.set_Shuffle), # TODO Get meta data 'Metadata': ({ 'mpris:trackid': '', # TODO Use (cpid, track.uri) @@ -351,3 +350,12 @@ class MprisObject(dbus.service.Object): def set_Rate(self, value): if value == 0: self.Pause() + + def get_Shuffle(self): + return self.backend.playback.shuffle.get() + + def set_Shuffle(self, value): + if value: + self.backend.playback.shuffle = True + else: + self.backend.playback.shuffle = False diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index 60c36288..7e434017 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -85,6 +85,28 @@ class PlayerInterfaceTest(unittest.TestCase): self.mpris.Set(mpris.PLAYER_IFACE, 'Rate', 0) self.assertEquals(self.backend.playback.state.get(), PAUSED) + def test_get_shuffle_returns_true_if_shuffle_is_active(self): + self.backend.playback.shuffle = True + result = self.mpris.Get(mpris.PLAYER_IFACE, 'Shuffle') + self.assertTrue(result) + + def test_get_shuffle_returns_false_if_shuffle_is_inactive(self): + self.backend.playback.shuffle = False + result = self.mpris.Get(mpris.PLAYER_IFACE, 'Shuffle') + self.assertFalse(result) + + def test_set_shuffle_to_true_activates_shuffle_mode(self): + self.backend.playback.shuffle = False + self.assertFalse(self.backend.playback.shuffle.get()) + result = self.mpris.Set(mpris.PLAYER_IFACE, 'Shuffle', True) + self.assertTrue(self.backend.playback.shuffle.get()) + + def test_set_shuffle_to_false_deactivates_shuffle_mode(self): + self.backend.playback.shuffle = True + self.assertTrue(self.backend.playback.shuffle.get()) + result = self.mpris.Set(mpris.PLAYER_IFACE, 'Shuffle', False) + self.assertFalse(self.backend.playback.shuffle.get()) + def test_get_minimum_rate_is_one_or_less(self): result = self.mpris.Get(mpris.PLAYER_IFACE, 'MinimumRate') self.assert_(result <= 1.0)