]> kaliko git repositories - mpd-sima.git/blobdiff - sima/mpdclient.py
Cleanup Exceptions
[mpd-sima.git] / sima / mpdclient.py
index fbd8cd8b32a157d778fd6e920c50f769b12657b3..4e6af68f37ec2614b71f3114da9746d56ae85af8 100644 (file)
@@ -22,7 +22,7 @@ from functools import wraps
 from logging import getLogger
 
 # external module
-from musicpd import MPDClient, MPDError
+from musicpd import MPDClient, MPDError as PlayerError
 
 
 # local import
@@ -32,10 +32,6 @@ from .lib.simastr import SimaStr
 from .utils.leven import levenshtein_ratio
 
 
-class PlayerError(MPDError):
-    """Fatal error in the player."""
-
-
 # Some decorators
 def bl_artist(func):
     def wrapper(*args, **kwargs):
@@ -59,7 +55,10 @@ 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
 
@@ -136,20 +135,20 @@ class MPD(MPDClient):
         try:
             super().connect(host, port)
         # Catch socket errors
-        except IOError as err:
+        except OSError as err:
             raise PlayerError('Could not connect to "%s:%s": %s' %
                               (host, port, err.strerror))
         # Catch all other possible errors
         # ConnectionError and ProtocolError are always fatal.  Others may not
         # be, but we don't know how to handle them here, so treat them as if
         # they are instead of ignoring them.
-        except MPDError as err:
+        except PlayerError as err:
             raise PlayerError('Could not connect to "%s:%s": %s' %
                               (host, port, err))
         if password:
             try:
                 self.password(password)
-            except (MPDError, IOError) as err:
+            except (PlayerError, OSError) as err:
                 raise PlayerError("Could not connect to '%s': %s" % (host, err))
         # Controls we have sufficient rights
         available_cmd = self.commands()
@@ -229,7 +228,7 @@ class MPD(MPDClient):
         curr = self.current
         try:
             ret = self.idle('database', 'playlist', 'player', 'options')
-        except (MPDError, IOError) as err:
+        except (PlayerError, OSError) as err:
             raise PlayerError("Couldn't init idle: %s" % err)
         if self._skipped_track(curr):
             ret.append('skipped')
@@ -362,14 +361,15 @@ class MPD(MPDClient):
 # #### Search Methods #####
     def _find_musicbrainz_artistid(self, artist):
         """Find MusicBrainzArtistID when possible.
-        For artist with aliases having a mbid but not the main name, no mbid is
-        fetched…
-        Searching for Artist('Russian Circls') do not reslove the MBID
         """
         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:
+            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: