From a1d6fc6df18bca9a06232a77deecf241f48de92c Mon Sep 17 00:00:00 2001 From: Kaliko Jack Date: Sun, 3 Feb 2019 14:05:17 +0100 Subject: [PATCH] Add albumart command --- CHANGES.txt | 1 + musicpd.py | 15 +++++++++++++-- test.py | 9 +++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8838c62..e8f3380 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -7,6 +7,7 @@ Changes in 0.4.4 UNRELEASED * Add partition commands (Thanks Naglis Jonaitis) * Add listfiles command * Add tagtypes (disable|enable|clear|all) commands +* Add albumart command Changes in 0.4.3 ---------------- diff --git a/musicpd.py b/musicpd.py index ae12e1d..aae85a5 100644 --- a/musicpd.py +++ b/musicpd.py @@ -204,7 +204,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 +502,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() @@ -594,7 +605,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() diff --git a/test.py b/test.py index f197670..fdd6efa 100755 --- a/test.py +++ b/test.py @@ -418,6 +418,15 @@ class TestMPDClient(unittest.TestCase): res = self.client.sticker_list('song', 'baz') self.assertEqual(['foo=bar'], res) + def test_albumart(self): + data = bytes('\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01' + '\x00\x01\x00\x00\xff\xdb\x00C\x00\x05\x03\x04', + encoding='utf8') + data_str = data.decode(encoding='utf-8', errors='surrogateescape') + self.MPDWillReturn('size: 36474\n', 'binary: 8192\n', + data_str+'\n', 'OK\n') + res = self.client.albumart('muse/Raised Fist/2002-Dedication/', 0) + self.assertEqual(res.get('data'), data) if __name__ == '__main__': unittest.main() -- 2.39.5