Hack to speed up Spotify backend startup with clean cache from 35s to 12s
The time Improvement is probably a magnitude or two larger on outdated caches.
This commit is contained in:
parent
436fd7815d
commit
d78d62c68c
@ -16,6 +16,10 @@ v0.7.3 (in development)
|
||||
`~/.cache/mopidy/spotify`. You can change this by setting
|
||||
:attr:`mopidy.settings.SPOTIFY_CACHE_PATH`.
|
||||
|
||||
- Reduce time required to update the Spotify cache on startup. One one
|
||||
system/Spotify account, the time from clean cache to ready for use was
|
||||
reduced from 35s to 12s.
|
||||
|
||||
|
||||
v0.7.2 (2012-05-07)
|
||||
===================
|
||||
|
||||
@ -43,6 +43,8 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager):
|
||||
self.container_manager = None
|
||||
self.playlist_manager = None
|
||||
|
||||
self._initial_data_receive_completed = False
|
||||
|
||||
def run_inside_try(self):
|
||||
self.setup()
|
||||
self.connect()
|
||||
@ -126,6 +128,17 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager):
|
||||
def log_message(self, session, data):
|
||||
"""Callback used by pyspotify"""
|
||||
logger.debug(u'System message: %s' % data.strip())
|
||||
if 'offline-mgr' in data and 'files unlocked' in data:
|
||||
# XXX This is a very very fragile and ugly hack, but we get no
|
||||
# proper event when libspotify is done with initial data loading.
|
||||
# We delay the expensive refresh of Mopidy's stored playlists until
|
||||
# this message arrives. This way, we avoid doing the refresh once
|
||||
# for every playlist or other change. This reduces the time from
|
||||
# startup until the Spotify backend is ready from 35s to 12s in one
|
||||
# test with clean Spotify cache. In cases with an outdated cache
|
||||
# the time improvements should be a lot better.
|
||||
self._initial_data_receive_completed = True
|
||||
self.refresh_stored_playlists()
|
||||
|
||||
def end_of_track(self, session):
|
||||
"""Callback used by pyspotify"""
|
||||
@ -135,6 +148,9 @@ class SpotifySessionManager(BaseThread, PyspotifySessionManager):
|
||||
def refresh_stored_playlists(self):
|
||||
"""Refresh the stored playlists in the backend with fresh meta data
|
||||
from Spotify"""
|
||||
if not self._initial_data_receive_completed:
|
||||
logger.debug(u'Still getting data; skipped refresh of playlists')
|
||||
return
|
||||
playlists = map(SpotifyTranslator.to_mopidy_playlist,
|
||||
self.session.playlist_container())
|
||||
playlists = filter(None, playlists)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user