aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar jesopo2019-05-11 18:22:40 +0100
committerGravatar jesopo2019-05-11 18:22:40 +0100
commitd291cd506373046d703450bc9d97082b89cbe8be (patch)
tree41a80e2c54f041d0bc550e9201c5119a6aab14f6 /src
parentChange ducks-min-message default to 100 (diff)
Revamp how CAPs are tracked through REQ and ACK/NAK etc
Diffstat (limited to 'src')
-rw-r--r--src/IRCServer.py21
-rw-r--r--src/utils/irc/__init__.py9
2 files changed, 15 insertions, 15 deletions
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()
+ 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.requested_capabilities += capability_batch
- self.send_capability_request(" ".join(capability_batch))
- def has_capability_queue(self):
- return bool(len(self._capability_queue))
+ 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