X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fplugins%2Finternal%2Fechonest.py;h=a5c1ede7bad1bc5ff60b7cde988b0b92c8786878;hb=279a3160534cad04c64c0d0b17f437c08ebb2703;hp=9631d702ed3e6cefc5715f8107ec4c59c4cf0ee8;hpb=42b4c427ed013d61a2ba5a2979c03dc2da097f9f;p=mpd-sima.git diff --git a/sima/plugins/internal/echonest.py b/sima/plugins/internal/echonest.py index 9631d70..a5c1ede 100644 --- a/sima/plugins/internal/echonest.py +++ b/sima/plugins/internal/echonest.py @@ -13,7 +13,7 @@ from hashlib import md5 # 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 @@ -152,8 +152,13 @@ class EchoNest(Plugin): 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 @@ -175,14 +180,12 @@ class EchoNest(Plugin): as_artists = simaech.get_similar(artist=current) self.log.debug('Requesting EchoNest for "{0}"'.format(current)) try: - [as_art.append(str(a)) for a in as_artists] - 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 @@ -215,13 +218,13 @@ class EchoNest(Plugin): 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]]))) @@ -288,7 +291,7 @@ class EchoNest(Plugin): 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)) @@ -313,7 +316,7 @@ class EchoNest(Plugin): 'history getting too large?') return None for track in self.to_add: - self.log.info('last.fm candidate: {0!s}'.format(track)) + self.log.info('echonest candidates: {0!s}'.format(track)) def _album(self): """Get albums for album queue mode @@ -330,7 +333,11 @@ class EchoNest(Plugin): 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