From: kaliko Date: Tue, 9 Dec 2014 16:25:19 +0000 (+0100) Subject: Better Meta object comparison X-Git-Tag: 0.13.0~18 X-Git-Url: http://git.kaliko.me/?a=commitdiff_plain;h=41048503e9b3cf0fdc58e14f35f483889a0b05ae;p=mpd-sima.git Better Meta object comparison --- diff --git a/sima/lib/meta.py b/sima/lib/meta.py index 78c6e79..44369a2 100644 --- a/sima/lib/meta.py +++ b/sima/lib/meta.py @@ -90,9 +90,11 @@ class Meta: 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): @@ -102,10 +104,11 @@ class Meta: 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)) diff --git a/sima/lib/player.py b/sima/lib/player.py index 473c9df..feaa4e3 100644 --- a/sima/lib/player.py +++ b/sima/lib/player.py @@ -180,8 +180,8 @@ class Player(object): # 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) @@ -190,9 +190,6 @@ class Player(object): 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))) diff --git a/sima/lib/webserv.py b/sima/lib/webserv.py index 7609da7..c05b86d 100644 --- a/sima/lib/webserv.py +++ b/sima/lib/webserv.py @@ -245,13 +245,13 @@ class WebService(Plugin): 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))