diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py index 3ba6fcf8..5619b859 100644 --- a/mopidy/frontends/mpris.py +++ b/mopidy/frontends/mpris.py @@ -327,6 +327,11 @@ class MprisObject(dbus.service.Object): @dbus.service.method(dbus_interface=PLAYER_IFACE) def OpenUri(self, uri): logger.debug(u'%s.OpenUri called', PLAYER_IFACE) + if not self.get_CanPlay(): + # NOTE The spec does not explictly require this check, but guarding + # the other methods doesn't help much if OpenUri is open for use. + logger.debug(u'%s.Play not allowed', PLAYER_IFACE) + return # TODO Check if URI is known scheme and has known MIME type. track = self.backend.library.lookup(uri).get() if track is not None: diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index 03f04842..42533870 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -691,7 +691,15 @@ class PlayerInterfaceTest(unittest.TestCase): self.assertEquals(self.backend.playback.state.get(), PLAYING) self.assertEquals(self.backend.playback.current_track.get().uri, 'a') + def test_open_uri_is_ignored_if_can_play_is_false(self): + self.mpris.get_CanPlay = lambda *_: False + self.backend.library.provider.dummy_library = [ + Track(uri='dummy:/test/uri')] + self.mpris.OpenUri('dummy:/test/uri') + self.assertEquals(len(self.backend.current_playlist.tracks.get()), 0) + def test_open_uri_adds_uri_to_current_playlist(self): + self.mpris.get_CanPlay = lambda *_: True self.backend.library.provider.dummy_library = [ Track(uri='dummy:/test/uri')] self.mpris.OpenUri('dummy:/test/uri') @@ -699,6 +707,7 @@ class PlayerInterfaceTest(unittest.TestCase): 'dummy:/test/uri') def test_open_uri_starts_playback_of_new_track_if_stopped(self): + self.mpris.get_CanPlay = lambda *_: True self.backend.library.provider.dummy_library = [ Track(uri='dummy:/test/uri')] self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')]) @@ -711,6 +720,7 @@ class PlayerInterfaceTest(unittest.TestCase): 'dummy:/test/uri') def test_open_uri_starts_playback_of_new_track_if_paused(self): + self.mpris.get_CanPlay = lambda *_: True self.backend.library.provider.dummy_library = [ Track(uri='dummy:/test/uri')] self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')]) @@ -726,6 +736,7 @@ class PlayerInterfaceTest(unittest.TestCase): 'dummy:/test/uri') def test_open_uri_starts_playback_of_new_track_if_playing(self): + self.mpris.get_CanPlay = lambda *_: True self.backend.library.provider.dummy_library = [ Track(uri='dummy:/test/uri')] self.backend.current_playlist.append([Track(uri='a'), Track(uri='b')])