from .plugin import Plugin
from .track import Track
from .meta import Artist
-from ..utils.utils import WSError
+from ..utils.utils import WSError, WSNotFound
def cache(func):
"""Caching decorator"""
self.log.debug('Requesting {} for {!r}'.format(self.ws.name, artist))
try:
[as_art.append(art) for art in as_artists]
+ except WSNotFound as err:
+ if artist.mbid:
+ return self.ws_similar_artists(Artist(name=artist.name))
+ self.log.warning('{}: {}'.format(self.ws.name, err))
except WSError as err:
self.log.warning('{}: {}'.format(self.ws.name, err))
if as_art:
return []
tolookfor = self.player.playlist[-1].Artist
self.log.info('Looking for artist similar to "{}"'.format(tolookfor))
+ self.log.debug(repr(tolookfor))
similar = self.ws_similar_artists(tolookfor)
if not similar:
self.log.info('Got nothing from {0}!'.format(self.ws.name))
self.log.warning('Got nothing from music library.')
self.log.warning('Try running in debug mode to guess why...')
return []
- queued_artists = { trk.Artist for trk in self.player.queue }
- for art in queued_artists:
- if art in ret:
- self.log.debug('Removing already queued artist: {0}'.format(art))
- ret = ret - queued_artists
+ # WARNING:
+ # * operation on set will not match against aliases
+ # * composite set w/ mbid set and whitout won't match either
+ queued_artists = {trk.Artist for trk in self.player.queue}
if ret & queued_artists:
- self.log.debug('Removing already queued artist: {0}'.format(ret & queued_artists))
+ self.log.debug('Removing already queued artists: '
+ '{0}'.format(ret & queued_artists))
ret = ret - queued_artists
- if self.player.current.Artist in ret:
+ if self.player.current and self.player.current.Artist in ret:
self.log.debug('Removing current artist: {0}'.format(self.player.current.Artist))
ret = ret - {self.player.current.Artist}
# Move around similars items to get in unplayed|not recently played
titles = [t for t in self.ws.get_toptrack(artist)]
except WSError as err:
self.log.warning('{0}: {1}'.format(self.ws.name, err))
- if self.ws.ratelimit:
- self.log.info('{0.name} ratelimit: {0.ratelimit}'.format(self.ws))
for trk in titles:
- found = self.player.fuzzy_find_track(artist.name, trk.title)
+ found = self.player.fuzzy_find_track(artist, trk.title)
random.shuffle(found)
if found:
self.log.debug('{0}'.format(found[0]))
self.queue_mode()
msg = ' '.join(['{0}: {1:>3d}'.format(k, v) for
k, v in sorted(self.ws.stats.items())])
- self.log.debug(msg)
+ self.log.debug('http stats: ' + msg)
candidates = self.to_add
self.to_add = list()
if self.plugin_conf.get('queue_mode') != 'album':