]> kaliko git repositories - mpd-sima.git/commitdiff
Better Meta object comparison
authorkaliko <kaliko@azylum.org>
Tue, 9 Dec 2014 16:25:19 +0000 (17:25 +0100)
committerkaliko <kaliko@azylum.org>
Tue, 9 Dec 2014 16:25:19 +0000 (17:25 +0100)
sima/lib/meta.py
sima/lib/player.py
sima/lib/webserv.py

index 78c6e790da198bc351e0c58c79a7307b5b5db2c0..44369a272e8cc51f1313d9b60519e0e59ac4589f 100644 (file)
@@ -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))
 
index 473c9dfa097dea5f18579c9df0d8dc3d8f03dc89..feaa4e3fe390960c16ae4057514d445532942dcf 100644 (file)
@@ -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)))
index 7609da765b5f7f820007590ef2b249ecb1df1662..c05b86d971a2b2a870532b54121f23a2b0ad8c3c 100644 (file)
@@ -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))