"""
# standard library import
-import random
# third parties components
from musicpd import CommandError
# local import
from ...lib.plugin import AdvancedPlugin
-from ...lib.meta import Artist
+from ...lib.meta import Artist, MetaContainer
from ...utils.utils import PluginException
else:
mpd_filter.append(f"({tag} == '{cfg[tag].strip()}')")
mpd_filter = ' AND '.join(mpd_filter)
- if 'AND' in mpd_filter:
- mpd_filter = f'({mpd_filter})'
+ # Ensure there is at least an artist name
+ mpd_filter = f"({mpd_filter} AND (artist != ''))"
return mpd_filter
queue_mode = self.plugin_conf.get('queue_mode', 'track')
target = self.plugin_conf.getint(f'{queue_mode}_to_add')
# look for artists acording to filter
- artists = self.player.list('artist', self.mpd_filter)
- random.shuffle(artists)
+ artists = MetaContainer([Artist(name=a) for a in self.player.list('artist', self.mpd_filter)])
+ if not artists:
+ self.log.info('Tags plugin found nothing to queue')
+ return candidates
artists = self.get_reorg_artists_list(artists)
- self.log.debug('Tags candidates: %s', ' / '.join(artists))
+ self.log.debug('Tags plugin found: %s', ' / '.join(map(str, artists)))
for artist in artists:
- if artist in {t.Artist for t in self.player.queue}:
- continue
self.log.debug('looking for %s', artist)
- trk = self.filter_track(self.player.find_tracks(Artist(name=artist)))
+ tracks = self.player.find_tracks(artist)
+ trk = self.filter_track(tracks)
if not trk:
continue
if queue_mode == 'track':
- self.log.info('Tags candidate: {}'.format(trk))
+ self.log.info('Tags plugin chose: {}'.format(trk))
candidates.append(trk)
if len(candidates) == target:
break