diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py index 4a15e9df..ec711713 100644 --- a/mopidy/frontends/mpris.py +++ b/mopidy/frontends/mpris.py @@ -115,7 +115,7 @@ class MprisObject(dbus.service.Object): return { 'PlaybackStatus': (self.get_PlaybackStatus, None), 'LoopStatus': (self.get_LoopStatus, self.set_LoopStatus), - 'Rate': (1.0, None), + 'Rate': (1.0, self.set_Rate), # TODO Get/set backend.playback.random 'Shuffle': (False, None), # TODO Get meta data @@ -347,3 +347,7 @@ class MprisObject(dbus.service.Object): elif value == 'Playlist': self.backend.playback.repeat = True self.backend.playback.single = False + + def set_Rate(self, value): + if value == 0: + self.Pause() diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index 3c753c08..60c36288 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -68,6 +68,31 @@ class PlayerInterfaceTest(unittest.TestCase): self.assertEquals(self.backend.playback.repeat.get(), True) self.assertEquals(self.backend.playback.single.get(), False) + def test_get_rate_is_greater_or_equal_than_minimum_rate(self): + rate = self.mpris.Get(mpris.PLAYER_IFACE, 'Rate') + minimum_rate = self.mpris.Get(mpris.PLAYER_IFACE, 'MinimumRate') + self.assert_(rate >= minimum_rate) + + def test_get_rate_is_less_or_equal_than_maximum_rate(self): + rate = self.mpris.Get(mpris.PLAYER_IFACE, 'Rate') + maximum_rate = self.mpris.Get(mpris.PLAYER_IFACE, 'MaximumRate') + self.assert_(rate >= maximum_rate) + + def test_set_rate_to_zero_pauses_playback(self): + self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')]) + self.backend.playback.play() + self.assertEquals(self.backend.playback.state.get(), PLAYING) + self.mpris.Set(mpris.PLAYER_IFACE, 'Rate', 0) + self.assertEquals(self.backend.playback.state.get(), PAUSED) + + def test_get_minimum_rate_is_one_or_less(self): + result = self.mpris.Get(mpris.PLAYER_IFACE, 'MinimumRate') + self.assert_(result <= 1.0) + + def test_get_maximum_rate_is_one_or_more(self): + result = self.mpris.Get(mpris.PLAYER_IFACE, 'MaximumRate') + self.assert_(result >= 1.0) + 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()