X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fmpdclient.py;h=ebf39a787c6be6905a7bd2f1fdca023ed21a6a26;hb=b8d6a5b81d3ffd38943862d235142821899abb34;hp=6b5b9767e95dd3eca58e3e1c6a16d7763da66c88;hpb=28caa80fbddaca9c7bb83a9d72dfba8130f16e44;p=mpd-sima.git diff --git a/sima/mpdclient.py b/sima/mpdclient.py index 6b5b976..ebf39a7 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): @@ -119,9 +115,12 @@ class MPD(MPDClient): def __getattr__(self, cmd): """Wrapper around MPDClient calls for abstract overriding""" track_wrapped = {'currentsong', 'find', 'playlistinfo', } - if cmd in track_wrapped: - return tracks_wrapper(super().__getattr__(cmd)) - return super().__getattr__(cmd) + try: + if cmd in track_wrapped: + return tracks_wrapper(super().__getattr__(cmd)) + return super().__getattr__(cmd) + except OSError as err: + raise PlayerError(err) def disconnect(self): """Overriding explicitly MPDClient.disconnect()""" @@ -139,20 +138,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() @@ -230,10 +229,7 @@ class MPD(MPDClient): * skipped current track skipped """ curr = self.current - try: - ret = self.idle('database', 'playlist', 'player', 'options') - except (MPDError, IOError) as err: - raise PlayerError("Couldn't init idle: %s" % err) + ret = self.idle('database', 'playlist', 'player', 'options') if self._skipped_track(curr): ret.append('skipped') if 'database' in ret: @@ -365,15 +361,11 @@ 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 = 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: