X-Git-Url: https://git.kaliko.me/?p=python-musicpdaio.git;a=blobdiff_plain;f=mpdaio%2Fclient.py;h=2b971627e6d604dcd4046f524eb979c1d0cb34b2;hp=c46aa74054c11a7de6f0e0d7c55f4fa0a1076b45;hb=HEAD;hpb=68eeb2a2a9eb95079076ceef62336e406d3f636c diff --git a/mpdaio/client.py b/mpdaio/client.py index c46aa74..3898fa5 100644 --- a/mpdaio/client.py +++ b/mpdaio/client.py @@ -37,8 +37,8 @@ class MPDClient: """ def __init__(self, host: str | None = None, - port: str | int | None = None, - password: str | None = None): + port: str | int | None = None, + password: str | None = None): #: Connection pool self._pool = ConnectionPool(max_connections=CONNECTION_MAX) #: connection timeout @@ -110,7 +110,7 @@ class MPDClient: @property def version(self) -> str: - """MPD protocol version + """MPD protocol version (returns an empty string if there is no opened connection) """ host = (self.host, self.port) version = {_.version for _ in self.connections} @@ -197,6 +197,7 @@ class CmdHandler: "playlistadd": self._fetch_nothing, "playlistclear": self._fetch_nothing, "playlistdelete": self._fetch_nothing, + "playlistlength": self._fetch_object, "playlistmove": self._fetch_nothing, "rename": self._fetch_nothing, "rm": self._fetch_nothing, @@ -217,6 +218,7 @@ class CmdHandler: "search": self._fetch_songs, "searchadd": self._fetch_nothing, "searchaddpl": self._fetch_nothing, + "searchcount": self._fetch_object, "update": self._fetch_item, "rescan": self._fetch_item, # Mounts and neighbors @@ -230,6 +232,7 @@ class CmdHandler: "sticker delete": self._fetch_nothing, "sticker list": self._fetch_list, "sticker find": self._fetch_songs, + "stickernames": self._fetch_list, # Connection Commands "close": None, "kill": None, @@ -267,7 +270,7 @@ class CmdHandler: "sendmessage": self._fetch_nothing, } self.command = None - self._command_list = None + self._command_list: list | None = None self.args = None self.pool = pool self.host = (server, port) @@ -347,7 +350,7 @@ class CmdHandler: amount -= len(result) return bytes(chunk) - async def _read_line(self, binary=False): + async def _read_line(self): line = await self.connection.readline() line = line.decode('utf-8') if not line.endswith('\n'): @@ -366,8 +369,8 @@ class CmdHandler: return None return line - async def _read_pair(self, separator, binary=False): - line = await self._read_line(binary=binary) + async def _read_pair(self, separator): + line = await self._read_line() if line is None: return None pair = line.split(separator, 1) @@ -375,11 +378,11 @@ class CmdHandler: raise MPDProtocolError(f"Could not parse pair: '{line}'") return pair - async def _read_pairs(self, separator=": ", binary=False): - pair = await self._read_pair(separator, binary=binary) + async def _read_pairs(self, separator=": "): + pair = await self._read_pair(separator) while pair: yield pair - pair = await self._read_pair(separator, binary=binary) + pair = await self._read_pair(separator) async def _read_list(self): seen = None @@ -478,7 +481,7 @@ class CmdHandler: async def _fetch_composite(self): obj = {} - async for key, value in self._read_pairs(binary=True): + async for key, value in self._read_pairs(): key = key.lower() obj[key] = value if key == 'binary': @@ -498,10 +501,10 @@ class CmdHandler: raise ConnectionError('Error reading binary content: ' f'Expects {amount}B, got {data_bytes}') # Fetches trailing new line - await self._read_line(binary=True) + await self._read_line() #ALT: await self.connection.readuntil(b'\n') # Fetches SUCCESS code - await self._read_line(binary=True) + await self._read_line() #ALT: await self.connection.readuntil(b'OK\n') return obj