]> kaliko git repositories - mpd-sima.git/blobdiff - sima/mpdclient.py
MPD client: Tries to resolve MusicBrainzArtistID when possible (fixed b36c71a)
[mpd-sima.git] / sima / mpdclient.py
index 338c3cff192af2509f635e1865dc5a4cfa27e6e4..6b5b9767e95dd3eca58e3e1c6a16d7763da66c88 100644 (file)
@@ -59,12 +59,15 @@ def set_artist_mbid(func):
         result = func(*args, **kwargs)
         if Meta.use_mbid:
             if result and not result.mbid:
-                result.mbid = cls._find_musicbrainz_artistid(result)
+                mbid = cls._find_musicbrainz_artistid(result)
+                artist = Artist(name=result.name, mbid=mbid)
+                artist.add_alias(result)
+                return artist
         return result
     return wrapper
 
 def tracks_wrapper(func):
-    """Convert plain track mapping as returned by MPDClient into :py:obj:Track
+    """Convert plain track mapping as returned by MPDClient into :py:obj:`sima.lib.track.Track`
     objects. This decorator accepts single track or list of tracks as input.
     """
     @wraps(func)
@@ -81,7 +84,7 @@ class MPD(MPDClient):
     """
     Player instance inheriting from MPDClient (python-musicpd).
 
-    Some methods are overridden to format objects as sima.lib.Track for
+    Some methods are overridden to format objects as :py:obj:`sima.lib.track.Track` for
     instance, other are calling parent class directly through super().
     cf. MPD.__getattr__
 
@@ -248,7 +251,7 @@ class MPD(MPDClient):
     def add(self, payload):
         """Overriding MPD's add method to accept Track objects
 
-        :param Track,list payload: Either a single :py:obj:`Track` or a list of it
+        :param Track,list payload: Either a single track or a list of it
         """
         if isinstance(payload, Track):
             super().__getattr__('add')(payload.file)
@@ -300,8 +303,8 @@ class MPD(MPDClient):
             >>> player.find_tracks(Album('In Utero', artist=Artist('Nirvana'))
 
         :param Artist,Album what: Artist or Album to fetch track from
-
-        Returns a list of :py:obj:Track objects
+        :return: A list of track objects
+        :rtype: list(Track)
         """
         if isinstance(what, Artist):
             return self._find_art(what)
@@ -368,8 +371,13 @@ class MPD(MPDClient):
         """
         if not self.use_mbid:
             return None
-        mbids = self.list('MUSICBRAINZ_ARTISTID',
-                          f'(artist == "{artist.name_sz}")')
+        mbids = None
+        for name in artist.names_sz:
+            self.log.debug(name)
+            filt = f'((artist == "{name}") AND (MUSICBRAINZ_ARTISTID != ""))'
+            mbids = self.list('MUSICBRAINZ_ARTISTID', filt)
+            if mbids:
+                break
         if not mbids:
             return None
         if len(mbids) > 1:
@@ -393,8 +401,8 @@ class MPD(MPDClient):
             >>> ['The Beatles', 'Beatles', 'the beatles']
 
         :param Artist artist: Artist to look for in MPD music library
-
-        Returns an Artist object
+        :return: Artist object
+        :rtype: Artist
         """
         found = False
         if artist.mbid: