X-Git-Url: http://git.kaliko.me/?a=blobdiff_plain;f=musicpd.py;h=6146a7a3be1bcc8dc959813d541610105519fbf7;hb=56b72eaeb273c06cb17c54e980954e6c82be2346;hp=ae12e1da501235b81f03846927054617795de51f;hpb=d006fc42d46ce07b117706d35a17bfeab62cac2d;p=python-musicpd.git diff --git a/musicpd.py b/musicpd.py index ae12e1d..6146a7a 100644 --- a/musicpd.py +++ b/musicpd.py @@ -2,6 +2,7 @@ # Copyright (C) 2008-2010 J. Alexander Treuman # Copyright (C) 2012-2019 Kaliko Jack # Copyright (C) 2019 Naglis Jonaitis +# Copyright (C) 2019 Bart Van Loon # # python-musicpd is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by @@ -28,7 +29,8 @@ HELLO_PREFIX = "OK MPD " ERROR_PREFIX = "ACK " SUCCESS = "OK" NEXT = "list_OK" -VERSION = '0.4.4' +VERSION = '0.4.5' +CONNECTION_TIMEOUT = 5 # seconds before a tcp connection attempt times out def iterator_wrapper(func): @@ -204,7 +206,7 @@ class MPDClient: "rm": self._fetch_nothing, "save": self._fetch_nothing, # Database Commands - #"albumart": self._fetch_object, + "albumart": self._fetch_composite, "count": self._fetch_object, "find": self._fetch_songs, "findadd": self._fetch_nothing, @@ -502,6 +504,17 @@ class MPDClient: def _fetch_neighbors(self): return self._fetch_objects(["neighbor"]) + def _fetch_composite(self): + obj = {} + for key, value in self._read_pairs(): + key = key.lower() + obj[key] = value + if key == 'binary': + break + by = self._read_line() + obj['data'] = by.encode(errors='surrogateescape') + return obj + @iterator_wrapper def _fetch_command_list(self): return self._read_command_list() @@ -545,7 +558,9 @@ class MPDClient: sock = None try: sock = socket.socket(af, socktype, proto) + sock.settimeout(CONNECTION_TIMEOUT) sock.connect(sa) + sock.settimeout(None) return sock except socket.error as socket_err: err = socket_err @@ -594,7 +609,7 @@ class MPDClient: self._sock = self._connect_unix(host) else: self._sock = self._connect_tcp(host, port) - self._rfile = self._sock.makefile("r", encoding='utf-8') + self._rfile = self._sock.makefile("r", encoding='utf-8', errors='surrogateescape') self._wfile = self._sock.makefile("w", encoding='utf-8') try: self._hello()