X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fmpdclient.py;h=6bbe63dd7b97816a4ccd52cbdcef3efa795c3d99;hb=3b4178f64c0785435930537c1e14edb7ad458008;hp=e2f0e2c4566f19055ebab35da270381a930cdd7c;hpb=a260ebea93f23d72aa6e0178744b0f64c469b7ba;p=mpd-sima.git diff --git a/sima/mpdclient.py b/sima/mpdclient.py index e2f0e2c..6bbe63d 100644 --- a/sima/mpdclient.py +++ b/sima/mpdclient.py @@ -23,7 +23,7 @@ from logging import getLogger from select import select # external module -from musicpd import MPDClient, MPDError +from musicpd import MPDClient, MPDError as PlayerError # local import @@ -31,11 +31,6 @@ from .lib.meta import Meta, Artist, Album from .lib.track import Track from .lib.simastr import SimaStr from .utils.leven import levenshtein_ratio -from .utils.utils import MPDSimaException - - -class PlayerError(MPDSimaException): - """Fatal error in the player.""" # Some decorators @@ -128,7 +123,7 @@ class MPD(MPDClient): if cmd in track_wrapped: return tracks_wrapper(super().__getattr__(cmd)) return super().__getattr__(cmd) - except OSError as err: + except OSError as err: # socket errors raise PlayerError(err) from err def disconnect(self): @@ -159,7 +154,7 @@ class MPD(MPDClient): if password: try: self.password(password) - except (MPDError, OSError) as err: + except OSError as err: raise PlayerError(f"Could not connect to '{host}': {err}") from err # Controls we have sufficient rights available_cmd = self.commands() @@ -236,21 +231,21 @@ class MPD(MPDClient): """ curr = self.current select_timeout = 5 - while True: - self.send_idle('database', 'playlist', 'player', 'options') - _read, _, _ = select([self], [], [], select_timeout) - if _read: # tries to read response - ret = self.fetch_idle() - if self._skipped_track(curr): - ret.append('skipped') - if 'database' in ret: - self._reset_cache() - return ret - # Nothing to read, canceling idle - try: # noidle cmd does not go through __getattr__, need to catch OSError then + try: # noidle cmd does not go through __getattr__, need to catch OSError then + while True: + self.send_idle('database', 'playlist', 'player', 'options') + _read, _, _ = select([self], [], [], select_timeout) + if _read: # tries to read response + ret = self.fetch_idle() + if self._skipped_track(curr): + ret.append('skipped') + if 'database' in ret: + self._reset_cache() + return ret + # Nothing to read, canceling idle self.noidle() - except OSError as err: - raise PlayerError(err) from err + except OSError as err: + raise PlayerError(err) from err def clean(self): """Clean blocking event (idle) and pending commands