From 3a9ce05b7c8bed3e77255033b17c391de06bd8be Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Thu, 1 Nov 2012 22:28:57 +0100 Subject: [PATCH] Add change track to playback providers. This method is intended to make implementing EOT handling much more streamlined by adding a way to easily just change the URI and any other state without messing with gstreamer pipe states Naming of this is a bit unfortunate as it is not the same as the core.playback's concept of change_track. At least not yet --- mopidy/backends/base.py | 21 ++++++++++++++++++--- mopidy/backends/spotify/playback.py | 18 +++++------------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/mopidy/backends/base.py b/mopidy/backends/base.py index 8250a24c..ebef096f 100644 --- a/mopidy/backends/base.py +++ b/mopidy/backends/base.py @@ -88,8 +88,8 @@ class BaseLibraryProvider(object): class BasePlaybackProvider(object): """ - :param audio: the audio actor - :type audio: actor proxy to an instance of :class:`mopidy.audio.Audio` + :param audio: audio sub-system + :type audio: actor proxy to a :class:`mopidy.audio.Audio` actor. :param backend: the backend :type backend: :class:`mopidy.backends.base.Backend` """ @@ -121,9 +121,24 @@ class BasePlaybackProvider(object): :rtype: :class:`True` if successful, else :class:`False` """ self.audio.prepare_change() - self.audio.set_uri(track.uri).get() + self.change_track(track) return self.audio.start_playback().get() + def change_track(self, track): + """ + Swith to provided track. + + Used for handling of EOT and and in :meth:`play`. + + *MAY be reimplemented by subclass.* + + :param track: the track to play + :type track: :class:`mopidy.models.Track` + :rtype: :class:`True` if successful, else :class:`False` + """ + self.audio.set_uri(track.uri).get() + return True + def resume(self): """ Resume playback at the same time position playback was paused. diff --git a/mopidy/backends/spotify/playback.py b/mopidy/backends/spotify/playback.py index e4534172..2e41f072 100644 --- a/mopidy/backends/spotify/playback.py +++ b/mopidy/backends/spotify/playback.py @@ -23,26 +23,18 @@ class SpotifyPlaybackProvider(base.BasePlaybackProvider): return super(SpotifyPlaybackProvider, self).pause() - def play(self, track): - if track.uri is None: - return False - + def change_track(self, track): + self.audio.set_uri('appsrc://').get() + self.audio.set_metadata(track).get() try: self.backend.spotify.session.load( Link.from_string(track.uri).as_track()) self.backend.spotify.session.play(1) - - self.audio.prepare_change() - self.audio.set_uri('appsrc://') - self.audio.start_playback() - self.audio.set_metadata(track) - - self._timer.play() - - return True except SpotifyError as e: logger.info('Playback of %s failed: %s', track.uri, e) return False + self._timer.play() + return True def resume(self): time_position = self.get_time_position()