]> kaliko git repositories - mpd-sima.git/commitdiff
Fixed bug in PlayerClient().search_albums()
authorkaliko <kaliko@azylum.org>
Sun, 3 May 2020 13:42:05 +0000 (15:42 +0200)
committerkaliko <kaliko@azylum.org>
Sun, 3 May 2020 13:42:05 +0000 (15:42 +0200)
search_albums method was ignoring some albums when Artist object had aliases.

doc/Changelog
sima/client.py

index fc3079176ec1d00e176e6a9b584016ec3110a4ce..48b711bbd11ccf9f1e3192119d4c01411172ac8d 100644 (file)
@@ -1,6 +1,9 @@
 MPD_sima v0.15.3 UNRELEASED
 
  * Improve HTTP client (use persistent connection)
+ * Fixed a serious bug in PlayerClient().search_albums()
+   "search_albums" method was ignoring some albums when Artist object had
+   aliases.
 
 -- kaliko jack <kaliko@azylum.org>
 
index 40842ba3fa4a46d1a2ecc22b4653420fe35d95a5..d10a3fe24d844c327bab2848a1d35ef86ae86789 100644 (file)
@@ -272,23 +272,29 @@ class PlayerClient(Player):
     def search_albums(self, artist):
         """
         Fetch all albums for "AlbumArtist"  == artist
-        Filter albums returned for "artist" == artist since MPD returns any
-               album containing at least a single track for artist
+        Then look for albums for "artist" == artist and try to filters
+        multi-artists albums
+
+        NB: Running "client.list('album', 'artist', name)" MPD returns any album
+            containing at least a track with "artist" == name
+        TODO: Use MusicBrainzID here cf. #30 @gitlab
         """
         albums = []
         for name in artist.names:
-            if len(artist.names) > 1:
+            if artist.aliases:
                 self.log.debug('Searching album for aliase: "%s"', name)
             kwalbart = {'albumartist':name, 'artist':name}
-            for album in self.list('album', 'albumartist', artist):
+            for album in self.list('album', 'albumartist', name):
                 if album and album not in albums:
                     albums.append(Album(name=album, **kwalbart))
-            for album in self.list('album', 'artist', artist):
+            for album in self.list('album', 'artist', name):
                 album_trks = [trk for trk in self.find('album', album)]
                 if 'Various Artists' in [tr.albumartist for tr in album_trks]:
                     self.log.debug('Discarding %s ("Various Artists" set)', album)
                     continue
                 arts = set([trk.artist for trk in album_trks])
+                # Avoid selecting album where artist is credited for a single
+                # track of the album
                 if len(set(arts)) < 2:  # TODO: better heuristic, use a ratio instead
                     if album not in albums:
                         albums.append(Album(name=album, **kwalbart))