diff --git a/src/irclib.py b/src/irclib.py index 95b2542b7..70dd41953 100644 --- a/src/irclib.py +++ b/src/irclib.py @@ -275,6 +275,7 @@ class IrcState(IrcCommandDispatcher): def reset(self): """Resets the state to normal, unconnected state.""" self.history.reset() + self.history.resize(conf.supybot.protocols.irc.maxHistoryLength()) self.channels = ircutils.IrcDict() self.nicksToHostmasks = ircutils.IrcDict() diff --git a/src/structures.py b/src/structures.py index b8a259f6f..a6d4daf88 100644 --- a/src/structures.py +++ b/src/structures.py @@ -60,6 +60,13 @@ class RingBuffer(object): self.L = [] self.i = 0 + def resize(self, i): + if self.full: + L = list(self) + self.reset() + self.L = L + self.maxSize = i + def __len__(self): return len(self.L) @@ -85,12 +92,11 @@ class RingBuffer(object): self.L[self.i] = elt self.i += 1 self.i %= len(self.L) + elif len(self) == self.maxSize: + self.full = True + self.append(elt) else: - if len(self) >= self.maxSize: - self.full = True - self.append(elt) - else: - self.L.append(elt) + self.L.append(elt) def extend(self, seq): for elt in seq: