diff --git a/mopidy/frontends/mpris.py b/mopidy/frontends/mpris.py index bba2c95c..e8cabf5d 100644 --- a/mopidy/frontends/mpris.py +++ b/mopidy/frontends/mpris.py @@ -177,6 +177,12 @@ class MprisObject(dbus.service.Object): self._mixer = mixer_refs[0].proxy() return self._mixer + def _get_track_id(self, cp_track): + return '/com/mopidy/track/%d' % cp_track.cpid + + def _get_cpid(self, track_id): + assert track_id.startswith('/com/mopidy/track/') + return track_id.split('/')[-1] ### Properties interface @@ -314,15 +320,14 @@ class MprisObject(dbus.service.Object): logger.debug(u'%s.SetPosition not allowed', PLAYER_IFACE) return position = position // 1000 - current_track = self.backend.playback.current_track.get() - # TODO Currently the ID is assumed to be the URI of the track. This - # should be changed to a D-Bus object ID than can be mapped to the CPID - # and URI of the track. - if current_track and current_track.uri != track_id: + current_cp_track = self.backend.playback.current_cp_track.get() + if current_cp_track is None: + return + if track_id != self._get_track_id(current_cp_track): return if position < 0: return - if current_track and current_track.length < position: + if current_cp_track.track.length < position: return self.backend.playback.seek(position) @@ -414,7 +419,7 @@ class MprisObject(dbus.service.Object): return {'mpris:trackid': ''} else: (cpid, track) = current_cp_track - metadata = {'mpris:trackid': '/com/mopidy/track/%d' % cpid} + metadata = {'mpris:trackid': self._get_track_id(current_cp_track)} if track.length: metadata['mpris:length'] = track.length * 1000 if track.uri: diff --git a/tests/frontends/mpris/player_interface_test.py b/tests/frontends/mpris/player_interface_test.py index e1c75f88..b568db64 100644 --- a/tests/frontends/mpris/player_interface_test.py +++ b/tests/frontends/mpris/player_interface_test.py @@ -675,7 +675,7 @@ class PlayerInterfaceTest(unittest.TestCase): self.assert_(before_set_position <= 5000) self.assertEquals(self.backend.playback.state.get(), PLAYING) - track_id = 'a' + track_id = '/com/mopidy/track/0' position_to_set_in_milliseconds = 20000 position_to_set_in_microseconds = position_to_set_in_milliseconds * 1000 @@ -698,7 +698,7 @@ class PlayerInterfaceTest(unittest.TestCase): self.assertEquals(self.backend.playback.state.get(), PLAYING) self.assertEquals(self.backend.playback.current_track.get().uri, 'a') - track_id = 'a' + track_id = '/com/mopidy/track/0' position_to_set_in_milliseconds = -1000 position_to_set_in_microseconds = position_to_set_in_milliseconds * 1000