Add volume to playback API of backends.

- Add volume get/setter to the playback provider.
- Add volume property to the playback controller.
This commit is contained in:
Thomas Adamcik 2012-09-04 00:21:00 +02:00
parent 44e3cc03e7
commit 4c509c2e2c
4 changed files with 54 additions and 0 deletions

View File

@ -319,6 +319,14 @@ class PlaybackController(object):
def _current_wall_time(self):
return int(time.time() * 1000)
@property
def volume(self):
return self.provider.get_volume()
@volume.setter
def volume(self, volume):
self.provider.set_volume(volume)
def change_track(self, cp_track, on_error_step=1):
"""
Change to the given track, keeping the current playback state.
@ -604,3 +612,27 @@ class BasePlaybackProvider(object):
:rtype: :class:`True` if successful, else :class:`False`
"""
raise NotImplementedError
# TODO: having these in the provider is stupid, but since we currently
# don't have gstreamer exposed in a sensible way for this...
# On the bright side it makes testing volume stuff less painful.
def get_volume(self):
"""
Get current volume
*MUST be implemented by subclass.*
:rtype: int [0..100] or :class:`None`
"""
raise NotImplementedError
def set_volume(self, volume):
"""
Get current volume
*MUST be implemented by subclass.*
:param: volume
:type volume: int [0..100]
"""
raise NotImplementedError

View File

@ -56,6 +56,10 @@ class DummyLibraryProvider(BaseLibraryProvider):
class DummyPlaybackProvider(BasePlaybackProvider):
def __init__(self, *args, **kwargs):
super(DummyPlaybackProvider, self).__init__(*args, **kwargs)
self._volume = None
def pause(self):
return True
@ -72,6 +76,12 @@ class DummyPlaybackProvider(BasePlaybackProvider):
def stop(self):
return True
def get_volume(self):
return self._volume
def set_volume(self, volume):
self._volume = volume
class DummyStoredPlaylistsProvider(BaseStoredPlaylistsProvider):
def create(self, name):

View File

@ -102,6 +102,12 @@ class LocalPlaybackProvider(BasePlaybackProvider):
def stop(self):
return self.backend.gstreamer.stop_playback().get()
def get_volume(self):
return self.backend.gstreamer.get_volume().get()
def set_volume(self, volume):
self.backend.gstreamer.set_volume(volume).get()
class LocalStoredPlaylistsProvider(BaseStoredPlaylistsProvider):
def __init__(self, *args, **kwargs):

View File

@ -41,3 +41,9 @@ class SpotifyPlaybackProvider(BasePlaybackProvider):
result = self.backend.gstreamer.stop_playback()
self.backend.spotify.session.play(0)
return result
def get_volume(self):
return self.backend.gstreamer.get_volume()
def set_volume(self, volume):
self.backend.gstreamer.set_volume(volume)