Replace set_state with <action>_playback helpers
This commit is contained in:
parent
e57f3f39c4
commit
882ba520d8
@ -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):
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user