From d7e3b18046e8f901894f9f680fdc050d489146be Mon Sep 17 00:00:00 2001 From: Jeremy Fincher Date: Wed, 2 Apr 2003 09:07:52 +0000 Subject: [PATCH] Added more intelligence to IrcMsgQueue --- src/irclib.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/irclib.py b/src/irclib.py index 01d7120a9..ddb4bf06c 100644 --- a/src/irclib.py +++ b/src/irclib.py @@ -92,13 +92,15 @@ class IrcCallback(object): class IrcMsgQueue(object): """Class for a queue of IrcMsgs. Eventually, it should be smart. """ - __slots__ = ('msgs', 'queue') + __slots__ = ('msgs', 'modes', 'kicks', 'lowpriority') def __init__(self): self.reset() def reset(self): + self.modes = queue() + self.kicks = queue() + self.lowpriority = queue() self.msgs = set() - self.queue = [] def enqueueMsg(self, msg): if msg in self.msgs: @@ -106,18 +108,28 @@ class IrcMsgQueue(object): debug.debugMsg('Not adding msg %s to queue' % msg, 'normal') else: self.msgs.add(msg) - self.queue.append(msg) + if msg.command == 'MODE': + self.modes.enqueue(msg) + elif msg.command == 'KICK': + self.kicks.enqueue(msg) + else: + self.lowpriority.enqueue(msg) def dequeueMsg(self): - if self.queue: - msg = self.queue.pop(0) - self.msgs.remove(msg) - return msg + if self.modes: + msg = self.modes.dequeue() + elif self.kicks: + msg = self.kicks.dequeue() + elif self.lowpriority: + msg = self.lowpriority.dequeue() else: - return None + msg = None + if msg: + self.msgs.remove(msg) + return msg def empty(self): - return self.queue == [] + return not (self.modes or self.kicks or self.lowpriority) ###