# local import
from ...lib.plugin import Plugin
-from ...lib.simaecho import SimaEch, EchoError, EchoNotFound
+from ...lib.simaecho import SimaEch, EchoError
from ...lib.track import Track
from ...lib.meta import Artist
Look in player library for availability of similar artists in
similarities
"""
+ dynamic = self.plugin_conf.getint('dynamic')
+ if dynamic <= 0:
+ dynamic = 100
+ similarity = self.plugin_conf.getint('similarity')
results = list()
- while len(similarities) > 0:
+ while (len(results) < dynamic
+ and len(similarities) > 0):
art_pop = similarities.pop()
results.extend(self.player.fuzzy_find_artist(art_pop))
return results
as_artists = simaech.get_similar(artist=current)
self.log.debug('Requesting EchoNest for "{0}"'.format(current))
try:
- for art in as_artists:
- if len(as_art) > self.plugin_conf.getint('artists'):
- break
- as_art.append(str(art))
- except EchoNotFound as err:
- self.log.warning(err)
+ # TODO: let's propagate Artist type
+ [as_art.append(str(art)) for art in as_artists]
except EchoError as err:
self.log.warning('EchoNest: {0}'.format(err))
if as_art:
- self.log.debug('Fetched {0} artist(s) from echonest'.format(
- len(as_art)))
+ self.log.debug('Fetched {0} artist(s)'.format(len(as_art)))
self.log.debug('x-ratelimit-remaining: {}'.format(SimaEch.ratelimit))
return as_art
return ret_extra
def get_local_similar_artists(self):
- """Check against local player for similar artists fetched from last.fm
+ """Check against local player for similar artists fetched from echonest
"""
current = self.player.current
self.log.info('Looking for artist similar to "{0.artist}"'.format(current))
similar = list(self.lfm_similar_artists())
if not similar:
- self.log.info('Got nothing from last.fm!')
+ self.log.info('Got nothing from echonest!')
return []
self.log.info('First five similar artist(s): {}...'.format(
' / '.join([a for a in similar[0:5]])))
if not album_to_queue:
self.log.info('No album found for "%s"' % artist)
continue
- self.log.info('last.fm album candidate: {0} - {1}'.format(
+ self.log.info('echonest album candidates: {0} - {1}'.format(
artist, album_to_queue))
nb_album_add += 1
self.to_add.extend(self.player.find_album(artist, album_to_queue))
def callback_need_track(self):
self._cleanup_cache()
if not self.player.current:
- self.log.info('Not currently playing track, cannot queue')
+ self.log.info('No current track, cannot queue')
+ return None
+ if not self.player.current.artist:
+ self.log.warning('No artist set for the current track')
+ self.log.debug(repr(self.player.current))
return None
self.queue_mode()
candidates = self.to_add