From e97b32d041496d42b55e9d56c5439919bae5fc05 Mon Sep 17 00:00:00 2001 From: Johannes Knutsen Date: Thu, 9 Jun 2011 17:18:35 +0200 Subject: [PATCH 1/2] rename SPOTIFY_HIGH_BITRATE setting to SPOTIFY_BITRATE, and use actual bitrate value to define preferred bitrate --- mopidy/backends/spotify/__init__.py | 1 + mopidy/backends/spotify/session_manager.py | 11 +++++------ mopidy/backends/spotify/translator.py | 4 ++-- mopidy/settings.py | 8 +++++--- mopidy/utils/settings.py | 7 +++++++ tests/utils/settings_test.py | 8 ++++++++ 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/mopidy/backends/spotify/__init__.py b/mopidy/backends/spotify/__init__.py index 9dababc0..da839b26 100644 --- a/mopidy/backends/spotify/__init__.py +++ b/mopidy/backends/spotify/__init__.py @@ -11,6 +11,7 @@ from mopidy.gstreamer import GStreamer logger = logging.getLogger('mopidy.backends.spotify') ENCODING = 'utf-8' +BITRATES = {96: 2, 160: 0, 320: 1} class SpotifyBackend(ThreadingActor, Backend): """ diff --git a/mopidy/backends/spotify/session_manager.py b/mopidy/backends/spotify/session_manager.py index 388b29c3..4b6abe85 100644 --- a/mopidy/backends/spotify/session_manager.py +++ b/mopidy/backends/spotify/session_manager.py @@ -8,6 +8,7 @@ from pykka.registry import ActorRegistry from mopidy import get_version, settings from mopidy.backends.base import Backend +from mopidy.backends.spotify import BITRATES from mopidy.backends.spotify.translator import SpotifyTranslator from mopidy.models import Playlist from mopidy.gstreamer import GStreamer @@ -58,12 +59,10 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager): return logger.info(u'Connected to Spotify') self.session = session - if settings.SPOTIFY_HIGH_BITRATE: - logger.debug(u'Preferring high bitrate from Spotify') - self.session.set_preferred_bitrate(1) - else: - logger.debug(u'Preferring normal bitrate from Spotify') - self.session.set_preferred_bitrate(0) + + logger.debug(u'Preferred Spotify bitrate is %s kbps.', settings.SPOTIFY_BITRATE) + self.session.set_preferred_bitrate(BITRATES[settings.SPOTIFY_BITRATE]) + self.container_manager = SpotifyContainerManager(self) self.container_manager.watch(self.session.playlist_container()) self.connected.set() diff --git a/mopidy/backends/spotify/translator.py b/mopidy/backends/spotify/translator.py index 21abdf78..91a2a9ae 100644 --- a/mopidy/backends/spotify/translator.py +++ b/mopidy/backends/spotify/translator.py @@ -4,7 +4,7 @@ import logging from spotify import Link, SpotifyError from mopidy import settings -from mopidy.backends.spotify import ENCODING +from mopidy.backends.spotify import ENCODING, BITRATES from mopidy.models import Artist, Album, Track, Playlist logger = logging.getLogger('mopidy.backends.spotify.translator') @@ -44,7 +44,7 @@ class SpotifyTranslator(object): track_no=spotify_track.index(), date=date, length=spotify_track.duration(), - bitrate=(settings.SPOTIFY_HIGH_BITRATE and 320 or 160), + bitrate=BITRATES[settings.SPOTIFY_BITRATE], ) @classmethod diff --git a/mopidy/settings.py b/mopidy/settings.py index 6721e0a6..9ac63719 100644 --- a/mopidy/settings.py +++ b/mopidy/settings.py @@ -248,11 +248,13 @@ SPOTIFY_USERNAME = u'' #: Used by :mod:`mopidy.backends.spotify`. SPOTIFY_PASSWORD = u'' -#: Do you prefer high bitrate (320k)? +#: Spotify preferred bitrate. +#: +#: Available values are 96, 160, and 320. #: #: Used by :mod:`mopidy.backends.spotify`. # #: Default:: #: -#: SPOTIFY_HIGH_BITRATE = False # 160k -SPOTIFY_HIGH_BITRATE = False +#: SPOTIFY_BITRATE = 160 +SPOTIFY_BITRATE = 160 diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index 2bd6e6f3..05d40a4a 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -8,6 +8,7 @@ import sys from mopidy import SettingsError from mopidy.utils.log import indent +from mopidy.backends.spotify import BITRATES as SPOTIFY_BITRATES logger = logging.getLogger('mopidy.utils.settings') @@ -107,6 +108,7 @@ def validate_settings(defaults, settings): 'SERVER': None, 'SERVER_HOSTNAME': 'MPD_SERVER_HOSTNAME', 'SERVER_PORT': 'MPD_SERVER_PORT', + 'SPOTIFY_HIGH_BITRATE': 'SPOTIFY_BITRATE', 'SPOTIFY_LIB_APPKEY': None, 'SPOTIFY_LIB_CACHE': 'SPOTIFY_CACHE_PATH', } @@ -127,6 +129,11 @@ def validate_settings(defaults, settings): 'longer available.') continue + if setting == 'SPOTIFY_BITRATE': + if value not in SPOTIFY_BITRATES.keys(): + errors[setting] = (u'Unavailable Spotify bitrate. ' + + u'Available bitrates are 96, 160, and 320.') + if setting not in defaults: errors[setting] = u'Unknown setting. Is it misspelled?' continue diff --git a/tests/utils/settings_test.py b/tests/utils/settings_test.py index 1ffff9a6..748eae85 100644 --- a/tests/utils/settings_test.py +++ b/tests/utils/settings_test.py @@ -10,6 +10,7 @@ class ValidateSettingsTest(unittest.TestCase): self.defaults = { 'MPD_SERVER_HOSTNAME': '::', 'MPD_SERVER_PORT': 6600, + 'SPOTIFY_BITRATE': 160, } def test_no_errors_yields_empty_dict(self): @@ -42,6 +43,13 @@ class ValidateSettingsTest(unittest.TestCase): '"mopidy.backends.despotify.DespotifyBackend" is no longer ' + 'available.') + def test_unavailable_bitrate_setting_returns_error(self): + result = validate_settings(self.defaults, + {'SPOTIFY_BITRATE': 50}) + self.assertEqual(result['SPOTIFY_BITRATE'], + u'Unavailable Spotify bitrate. ' + + u'Available bitrates are 96, 160, and 320.') + def test_two_errors_are_both_reported(self): result = validate_settings(self.defaults, {'FOO': '', 'BAR': ''}) From 232155007999dd7b2a8388da5f64ec1073c1ce76 Mon Sep 17 00:00:00 2001 From: Stein Magnus Jodal Date: Thu, 9 Jun 2011 17:35:22 +0200 Subject: [PATCH 2/2] Fix import cycle --- mopidy/utils/settings.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mopidy/utils/settings.py b/mopidy/utils/settings.py index 05d40a4a..01fee23d 100644 --- a/mopidy/utils/settings.py +++ b/mopidy/utils/settings.py @@ -8,7 +8,6 @@ import sys from mopidy import SettingsError from mopidy.utils.log import indent -from mopidy.backends.spotify import BITRATES as SPOTIFY_BITRATES logger = logging.getLogger('mopidy.utils.settings') @@ -130,7 +129,7 @@ def validate_settings(defaults, settings): continue if setting == 'SPOTIFY_BITRATE': - if value not in SPOTIFY_BITRATES.keys(): + if value not in (96, 160, 320): errors[setting] = (u'Unavailable Spotify bitrate. ' + u'Available bitrates are 96, 160, and 320.')