Merge branch 'feature/multiple-bitrates-support' into develop

This commit is contained in:
Stein Magnus Jodal 2011-06-09 17:35:37 +02:00
commit ee09365ccf
6 changed files with 27 additions and 11 deletions

View File

@ -11,6 +11,7 @@ from mopidy.gstreamer import GStreamer
logger = logging.getLogger('mopidy.backends.spotify') logger = logging.getLogger('mopidy.backends.spotify')
ENCODING = 'utf-8' ENCODING = 'utf-8'
BITRATES = {96: 2, 160: 0, 320: 1}
class SpotifyBackend(ThreadingActor, Backend): class SpotifyBackend(ThreadingActor, Backend):
""" """

View File

@ -8,6 +8,7 @@ from pykka.registry import ActorRegistry
from mopidy import get_version, settings from mopidy import get_version, settings
from mopidy.backends.base import Backend from mopidy.backends.base import Backend
from mopidy.backends.spotify import BITRATES
from mopidy.backends.spotify.translator import SpotifyTranslator from mopidy.backends.spotify.translator import SpotifyTranslator
from mopidy.models import Playlist from mopidy.models import Playlist
from mopidy.gstreamer import GStreamer from mopidy.gstreamer import GStreamer
@ -58,12 +59,10 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager):
return return
logger.info(u'Connected to Spotify') logger.info(u'Connected to Spotify')
self.session = session self.session = session
if settings.SPOTIFY_HIGH_BITRATE:
logger.debug(u'Preferring high bitrate from Spotify') logger.debug(u'Preferred Spotify bitrate is %s kbps.', settings.SPOTIFY_BITRATE)
self.session.set_preferred_bitrate(1) self.session.set_preferred_bitrate(BITRATES[settings.SPOTIFY_BITRATE])
else:
logger.debug(u'Preferring normal bitrate from Spotify')
self.session.set_preferred_bitrate(0)
self.container_manager = SpotifyContainerManager(self) self.container_manager = SpotifyContainerManager(self)
self.container_manager.watch(self.session.playlist_container()) self.container_manager.watch(self.session.playlist_container())
self.connected.set() self.connected.set()

View File

@ -4,7 +4,7 @@ import logging
from spotify import Link, SpotifyError from spotify import Link, SpotifyError
from mopidy import settings 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 from mopidy.models import Artist, Album, Track, Playlist
logger = logging.getLogger('mopidy.backends.spotify.translator') logger = logging.getLogger('mopidy.backends.spotify.translator')
@ -44,7 +44,7 @@ class SpotifyTranslator(object):
track_no=spotify_track.index(), track_no=spotify_track.index(),
date=date, date=date,
length=spotify_track.duration(), length=spotify_track.duration(),
bitrate=(settings.SPOTIFY_HIGH_BITRATE and 320 or 160), bitrate=BITRATES[settings.SPOTIFY_BITRATE],
) )
@classmethod @classmethod

View File

@ -248,11 +248,13 @@ SPOTIFY_USERNAME = u''
#: Used by :mod:`mopidy.backends.spotify`. #: Used by :mod:`mopidy.backends.spotify`.
SPOTIFY_PASSWORD = u'' 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`. #: Used by :mod:`mopidy.backends.spotify`.
# #
#: Default:: #: Default::
#: #:
#: SPOTIFY_HIGH_BITRATE = False # 160k #: SPOTIFY_BITRATE = 160
SPOTIFY_HIGH_BITRATE = False SPOTIFY_BITRATE = 160

View File

@ -107,6 +107,7 @@ def validate_settings(defaults, settings):
'SERVER': None, 'SERVER': None,
'SERVER_HOSTNAME': 'MPD_SERVER_HOSTNAME', 'SERVER_HOSTNAME': 'MPD_SERVER_HOSTNAME',
'SERVER_PORT': 'MPD_SERVER_PORT', 'SERVER_PORT': 'MPD_SERVER_PORT',
'SPOTIFY_HIGH_BITRATE': 'SPOTIFY_BITRATE',
'SPOTIFY_LIB_APPKEY': None, 'SPOTIFY_LIB_APPKEY': None,
'SPOTIFY_LIB_CACHE': 'SPOTIFY_CACHE_PATH', 'SPOTIFY_LIB_CACHE': 'SPOTIFY_CACHE_PATH',
} }
@ -127,6 +128,11 @@ def validate_settings(defaults, settings):
'longer available.') 'longer available.')
continue continue
if setting == 'SPOTIFY_BITRATE':
if value not in (96, 160, 320):
errors[setting] = (u'Unavailable Spotify bitrate. ' +
u'Available bitrates are 96, 160, and 320.')
if setting not in defaults: if setting not in defaults:
errors[setting] = u'Unknown setting. Is it misspelled?' errors[setting] = u'Unknown setting. Is it misspelled?'
continue continue

View File

@ -10,6 +10,7 @@ class ValidateSettingsTest(unittest.TestCase):
self.defaults = { self.defaults = {
'MPD_SERVER_HOSTNAME': '::', 'MPD_SERVER_HOSTNAME': '::',
'MPD_SERVER_PORT': 6600, 'MPD_SERVER_PORT': 6600,
'SPOTIFY_BITRATE': 160,
} }
def test_no_errors_yields_empty_dict(self): def test_no_errors_yields_empty_dict(self):
@ -42,6 +43,13 @@ class ValidateSettingsTest(unittest.TestCase):
'"mopidy.backends.despotify.DespotifyBackend" is no longer ' + '"mopidy.backends.despotify.DespotifyBackend" is no longer ' +
'available.') '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): def test_two_errors_are_both_reported(self):
result = validate_settings(self.defaults, result = validate_settings(self.defaults,
{'FOO': '', 'BAR': ''}) {'FOO': '', 'BAR': ''})