diff --git a/mopidy/backends/base/playback.py b/mopidy/backends/base/playback.py index 16ac75d1..778e7a54 100644 --- a/mopidy/backends/base/playback.py +++ b/mopidy/backends/base/playback.py @@ -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 diff --git a/mopidy/backends/dummy/__init__.py b/mopidy/backends/dummy/__init__.py index 70efb028..2234242c 100644 --- a/mopidy/backends/dummy/__init__.py +++ b/mopidy/backends/dummy/__init__.py @@ -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): diff --git a/mopidy/backends/local/__init__.py b/mopidy/backends/local/__init__.py index e8638a3a..1b1f9730 100644 --- a/mopidy/backends/local/__init__.py +++ b/mopidy/backends/local/__init__.py @@ -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): diff --git a/mopidy/backends/spotify/playback.py b/mopidy/backends/spotify/playback.py index dc328fc9..116be285 100644 --- a/mopidy/backends/spotify/playback.py +++ b/mopidy/backends/spotify/playback.py @@ -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)