From 882ba520d89eba517be33cd4a0cb1a235685a99c Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Tue, 3 May 2011 23:04:15 +0200 Subject: [PATCH] Replace set_state with _playback helpers --- mopidy/backends/local/__init__.py | 10 ++++++---- mopidy/backends/spotify/playback.py | 13 +++++++------ mopidy/gstreamer.py | 29 ++++++++++++++++++++--------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/mopidy/backends/local/__init__.py b/mopidy/backends/local/__init__.py index 126034f1..5fb7f1cb 100644 --- a/mopidy/backends/local/__init__.py +++ b/mopidy/backends/local/__init__.py @@ -72,19 +72,21 @@ class LocalPlaybackController(PlaybackController): class LocalPlaybackProvider(BasePlaybackProvider): def pause(self): - return self.backend.gstreamer.set_state('PAUSED').get() + return self.backend.gstreamer.pause_playback().get() def play(self, track): - return self.backend.gstreamer.play_uri(track.uri).get() + self.backend.gstreamer.prepare_playback() + self.backend.gstreamer.set_uri(track.uri).get() + return self.backend.gstreamer.start_playback().get() def resume(self): - return self.backend.gstreamer.set_state('PLAYING').get() + return self.backend.gstreamer.start_playback().get() def seek(self, time_position): return self.backend.gstreamer.set_position(time_position).get() def stop(self): - return self.backend.gstreamer.set_state('READY').get() + return self.backend.gstreamer.stop_playback().get() class LocalStoredPlaylistsProvider(BaseStoredPlaylistsProvider): diff --git a/mopidy/backends/spotify/playback.py b/mopidy/backends/spotify/playback.py index 3f2a157b..7c67a7c1 100644 --- a/mopidy/backends/spotify/playback.py +++ b/mopidy/backends/spotify/playback.py @@ -8,10 +8,9 @@ logger = logging.getLogger('mopidy.backends.spotify.playback') class SpotifyPlaybackProvider(BasePlaybackProvider): def pause(self): - return self.backend.gstreamer.set_state('PAUSED') + return self.backend.gstreamer.pause_playback() def play(self, track): - self.backend.gstreamer.set_state('READY') if self.backend.playback.state == self.backend.playback.PLAYING: self.backend.spotify.session.play(0) if track.uri is None: @@ -20,7 +19,9 @@ class SpotifyPlaybackProvider(BasePlaybackProvider): self.backend.spotify.session.load( Link.from_string(track.uri).as_track()) self.backend.spotify.session.play(1) - self.backend.gstreamer.play_uri('appsrc://') + self.backend.gstreamer.prepare_playback() + self.backend.gstreamer.set_uri('appsrc://') + self.backend.gstreamer.start_playback() self.backend.gstreamer.set_metadata(track) return True except SpotifyError as e: @@ -31,12 +32,12 @@ class SpotifyPlaybackProvider(BasePlaybackProvider): return self.seek(self.backend.playback.time_position) def seek(self, time_position): - self.backend.gstreamer.set_state('READY') + self.backend.gstreamer.prepare_playback() self.backend.spotify.session.seek(time_position) - self.backend.gstreamer.set_state('PLAYING') + self.backend.gstreamer.start_playback() return True def stop(self): - result = self.backend.gstreamer.set_state('READY') + result = self.backend.gstreamer.stop_playback() self.backend.spotify.session.play(0) return result diff --git a/mopidy/gstreamer.py b/mopidy/gstreamer.py index ddcc6a56..052c0827 100644 --- a/mopidy/gstreamer.py +++ b/mopidy/gstreamer.py @@ -133,7 +133,7 @@ class GStreamer(ThreadingActor): 'Telling backend ...') self._get_backend().playback.on_end_of_track() elif message.type == gst.MESSAGE_ERROR: - self.set_state('NULL') + self.stop_playback() error, debug = message.parse_error() logger.error(u'%s %s', error, debug) # FIXME Should we send 'stop_playback' to the backend here? Can we @@ -144,11 +144,9 @@ class GStreamer(ThreadingActor): assert len(backend_refs) == 1, 'Expected exactly one running backend.' return backend_refs[0].proxy() - def play_uri(self, uri): + def set_uri(self, uri): """Play audio at URI""" - self.set_state('READY') self.gst_uridecodebin.set_property('uri', uri) - return self.set_state('PLAYING') def deliver_data(self, caps_string, data): """Deliver audio data to be played""" @@ -185,7 +183,19 @@ class GStreamer(ThreadingActor): self.gst_pipeline.get_state() # block until seek is done return handeled - def set_state(self, state_name): + def start_playback(self): + return self.set_state(gst.STATE_PLAYING) + + def pause_playback(self): + return self.set_state(gst.STATE_PAUSE) + + def prepare_playback(self): + return self.set_state(gst.STATE_READY) + + def stop_playback(self): + return self.set_state(gst.STATE_NULL) + + def set_state(self, state): """ Set the GStreamer state. Returns :class:`True` if successful. @@ -202,13 +212,14 @@ class GStreamer(ThreadingActor): :type state_name: string :rtype: :class:`True` or :class:`False` """ - result = self.gst_pipeline.set_state( - getattr(gst, 'STATE_' + state_name)) + result = self.gst_pipeline.set_state(state) if result == gst.STATE_CHANGE_FAILURE: - logger.warning('Setting GStreamer state to %s: failed', state_name) + logger.warning('Setting GStreamer state to %s: failed', + state.value_name) return False else: - logger.debug('Setting GStreamer state to %s: OK', state_name) + logger.debug('Setting GStreamer state to %s: OK', + state.value_name) return True def get_volume(self):