if isinstance(other, Meta) and self.mbid and other.mbid:
if self.mbid and other.mbid:
return self.mbid == other.mbid
- else:
- return (other.__str__() == self.__str__() or
- other.__str__() in self.__aliases)
+ elif isinstance(other, Meta):
+ return bool(self.names & other.names)
+ elif getattr(other, '__str__', None):
+ # is other.__str__() in self.__name or self.__aliases
+ return other.__str__() in self.names
return False
def __hash__(self):
def add_alias(self, other):
if getattr(other, '__str__', None):
- if callable(other.__str__):
+ if callable(other.__str__) and other.__str__() != self.name:
self.__aliases |= {other.__str__()}
elif isinstance(other, Meta):
- self.__aliases |= other.__aliases
+ if other.name != self.name:
+ self.__aliases |= other.__aliases
else:
raise MetaException('No __str__ method found in {!r}'.format(other))
# Regular lowered string comparison
if artist.name.lower() == fuzz_art.lower():
found = True
+ artist.add_alias(fuzz_art)
if artist.name != fuzz_art:
- artist.add_alias(fuzz_art)
self.log.debug('"%s" matches "%s".' % (fuzz_art, artist))
continue
# SimaStr string __eq__ (not regular string comparison here)
artist.add_alias(fuzz_art)
self.log.info('"%s" quite probably matches "%s" (SimaStr)' %
(fuzz_art, artist))
- #else:
- #self.log.debug('FZZZ: "%s" does not match "%s"' %
- #(fuzz_art, artist))
if found:
if artist.aliases:
self.log.debug('Found: {}'.format('/'.join(artist.names)))
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 and self.player.current.Artist in ret:
self.log.debug('Removing current artist: {0}'.format(self.player.current.Artist))