Merge branch 'feature/multiple-bitrates-support' into develop
This commit is contained in:
commit
ee09365ccf
@ -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):
|
||||
"""
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -107,6 +107,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 +128,11 @@ def validate_settings(defaults, settings):
|
||||
'longer available.')
|
||||
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:
|
||||
errors[setting] = u'Unknown setting. Is it misspelled?'
|
||||
continue
|
||||
|
||||
@ -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': ''})
|
||||
|
||||
Loading…
Reference in New Issue
Block a user