X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fmpdclient.py;h=4e6af68f37ec2614b71f3114da9746d56ae85af8;hb=a978d2975c3201dbac0c9e43a08337a800438d2f;hp=fbd8cd8b32a157d778fd6e920c50f769b12657b3;hpb=d1ab072afd8e59267b7cad0e679a4d947fe7fd19;p=mpd-sima.git diff --git a/sima/mpdclient.py b/sima/mpdclient.py index fbd8cd8..4e6af68 100644 --- a/sima/mpdclient.py +++ b/sima/mpdclient.py @@ -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: