From d291cd506373046d703450bc9d97082b89cbe8be Mon Sep 17 00:00:00 2001 From: jesopo Date: Sat, 11 May 2019 18:22:40 +0100 Subject: Revamp how CAPs are tracked through REQ and ACK/NAK etc --- src/IRCServer.py | 23 +++++++---------------- src/utils/irc/__init__.py | 9 +++++++++ 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/IRCServer.py b/src/IRCServer.py index 1a556ee5..01010fce 100644 --- a/src/IRCServer.py +++ b/src/IRCServer.py @@ -24,10 +24,10 @@ class Server(IRCObject.Object): self.realname = None # type: typing.Optional[str] self.hostname = None # type: typing.Optional[str] - self._capability_queue = set([]) # type: typing.Set[str] + self.capability_queue = { + } # type: typing.Dict[str, utils.irc.Capability] self._capabilities_waiting = set([]) # type: typing.Set[str] self.agreed_capabilities = set([]) # type: typing.Set[str] - self.requested_capabilities = [] # type: typing.List[str] self.server_capabilities = {} # type: typing.Dict[str, str] self.batches = {} # type: typing.Dict[str, IRCLine.ParsedLine] self.cap_started = False @@ -269,21 +269,12 @@ class Server(IRCObject.Object): def send_capibility_ls(self) -> IRCLine.SentLine: return self.send(utils.irc.protocol.capability_ls()) - def queue_capability(self, capability: str): - self._capability_queue.add(capability) - def queue_capabilities(self, capabilities: typing.List[str]): - self._capability_queue.update(capabilities) def send_capability_queue(self): - if self.has_capability_queue(): - capability_queue = list(self._capability_queue) - self._capability_queue.clear() - - for i in range(0, len(capability_queue), 10): - capability_batch = capability_queue[i:i+10] - self.requested_capabilities += capability_batch - self.send_capability_request(" ".join(capability_batch)) - def has_capability_queue(self): - return bool(len(self._capability_queue)) + capability_queue = [cap for cap in self.capability_queue.keys()] + + for i in range(0, len(capability_queue), 10): + capability_batch = capability_queue[i:i+10] + self.send_capability_request(" ".join(capability_batch)) def send_capability_request(self, capability: str) -> IRCLine.SentLine: return self.send(utils.irc.protocol.capability_request(capability)) def send_capability_end(self) -> IRCLine.SentLine: diff --git a/src/utils/irc/__init__.py b/src/utils/irc/__init__.py index 15850cea..2e1ef6e4 100644 --- a/src/utils/irc/__init__.py +++ b/src/utils/irc/__init__.py @@ -281,8 +281,17 @@ class Capability(object): self._caps = set([name, draft_name]) self._name = name self._draft_name = draft_name + self._on_ack_callbacks = [] def available(self, capabilities: typing.List[str]) -> str: match = list(set(capabilities)&self._caps) return match[0] if match else None def enabled(self, capability: str) -> bool: return capability in self._caps + + def on_ack(self, callback: typing.Callable[[], None]): + self._on_ack_callbacks.append(callback) + def ack(self): + for callback in self._on_ack_callbacks: + callback() + def nak(self): + pass -- cgit v1.3.1-10-gc9f91