X-Git-Url: https://git.kaliko.me/?a=blobdiff_plain;f=sima%2Fmpdclient.py;h=c4ebadeaa7e1d4453aa92d8bbda5830c0715842e;hb=94c7b5c9c88a414afd30aa91b133afec6f3c4b6a;hp=e2f0e2c4566f19055ebab35da270381a930cdd7c;hpb=a260ebea93f23d72aa6e0178744b0f64c469b7ba;p=mpd-sima.git diff --git a/sima/mpdclient.py b/sima/mpdclient.py index e2f0e2c..c4ebade 100644 --- a/sima/mpdclient.py +++ b/sima/mpdclient.py @@ -128,7 +128,9 @@ 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 + except MPDError as err: # hight level MPD client errors raise PlayerError(err) from err def disconnect(self): @@ -236,21 +238,23 @@ 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 + except MPDError as err: # hight level MPD client errors + raise PlayerError(err) from err def clean(self): """Clean blocking event (idle) and pending commands