class WebService(Plugin):
"""similar artists webservice
"""
+ # pylint: disable=bad-builtin
def __init__(self, daemon):
Plugin.__init__(self, daemon)
* not blacklisted
"""
artist = tracks[0].artist
- black_list = self.player.queue + self.to_add
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ black_list = self.player.playlist + self.to_add
+ else:
+ black_list = self.player.queue + self.to_add
not_in_hist = list(set(tracks) - set(self.get_history(artist=artist)))
if self.plugin_conf.get('queue_mode') != 'top' and not not_in_hist:
- self.log.debug('All tracks already played for "{}"'.format(artist))
+ self.log.debug('All tracks already played for "%s"', artist)
random.shuffle(not_in_hist)
candidate = []
for trk in [_ for _ in not_in_hist if _ not in black_list]:
# Should use albumartist heuristic as well
if self.plugin_conf.getboolean('single_album'): # pylint: disable=no-member
if (trk.album == self.player.current.album or
- trk.album in [tr.album for tr in self.to_add]):
+ trk.album in [tr.album for tr in black_list]):
self.log.debug('Found unplayed track ' +
'but from an album already queued: %s', trk)
continue
return as_art
def get_recursive_similar_artist(self):
+ """Check against local player for similar artists (recursive w/ history)
+ """
if not self.player.playlist:
return
history = list(self.history)
- history = self.player.queue + history
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ history = self.player.playlist + history
+ else:
+ history = self.player.queue + history
history = deque(history)
last_trk = history.popleft() # remove
extra_arts = list()
if not ret:
self.log.warning('Got nothing from music library.')
return []
- queued_artists = MetaContainer([trk.Artist for trk in self.player.queue])
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ queued_artists = MetaContainer([trk.Artist for trk in self.player.playlist])
+ else:
+ queued_artists = MetaContainer([trk.Artist for trk in self.player.queue])
self.log.trace('Already queued: {}'.format(queued_artists))
self.log.trace('Candidate: {}'.format(ret))
if ret & queued_artists:
albums_not_in_hist = list(albums - albums_yet_in_hist)
# Get to next artist if there are no unplayed albums
if not albums_not_in_hist:
- self.log.info('No album found for "%s"' % artist)
+ self.log.info('No unplayed album found for "%s"' % artist)
continue
album_to_queue = str()
random.shuffle(albums_not_in_hist)
for album in albums_not_in_hist:
- tracks = self.player.find_album(artist, album)
- # Look if one track of the album is already queued
- # Good heuristic, at least enough to guess if the whole album is
- # already queued.
- if tracks[0] in self.player.queue:
- self.log.debug('"%s" already queued, skipping!', tracks[0].album)
+ # Controls the album found is not already queued
+ if album in {t.album for t in self.player.queue}:
+ self.log.debug('"%s" already queued, skipping!', album)
continue
+ # In random play mode use complete playlist to filter
+ if self.player.playmode.get('random'):
+ if album in {t.album for t in self.player.playlist}:
+ self.log.debug('"%s" already in playlist, skipping!', album)
+ continue
album_to_queue = album
if not album_to_queue:
self.log.info('No album found for "%s"', artist)