Replace set_state with <action>_playback helpers

This commit is contained in:
Thomas Adamcik 2011-05-03 23:04:15 +02:00
parent e57f3f39c4
commit 882ba520d8
3 changed files with 33 additions and 19 deletions

View File

@ -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):

View File

@ -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

View File

@ -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):