From bb4ec082dd4df99d60e9ea6af8f688db443ec8d0 Mon Sep 17 00:00:00 2001 From: jesopo Date: Sun, 10 Feb 2019 20:49:59 +0000 Subject: Let IRCLine.Line handle truncating command output --- src/IRCLine.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src/IRCLine.py') diff --git a/src/IRCLine.py b/src/IRCLine.py index e5a58707..6aba7ed6 100644 --- a/src/IRCLine.py +++ b/src/IRCLine.py @@ -4,11 +4,14 @@ from src import IRCObject, utils LINE_CUTOFF = 450 class Line(IRCObject.Object): - def __init__(self, send_time: datetime.datetime, line: str): + def __init__(self, server: "IRCServer.Server", send_time: datetime.datetime, + line: str): + self.server = server self._line = line self.send_time = send_time - data, truncated = utils.encode_truncate(line, "utf8", LINE_CUTOFF) + data, truncated = utils.encode_truncate(line, "utf8", + self._char_limit()) self._data = data self._truncated = truncated @@ -20,11 +23,26 @@ class Line(IRCObject.Object): def __str__(self) -> str: return self._data + def _char_limit(self): + return LINE_CUTOFF-len(":%s " % self.server.hostmask()) + + def data(self) -> bytes: + return b"%s\r\n" % self._data + def decoded_data(self) -> bytes: + return self._data.decode("utf8") + def truncated(self) -> str: + return self._truncated + def on_send(self, func: typing.Callable[[], None]): self._on_send.append(func) def sent(self): for func in self._on_send[:]: func() - def data(self) -> bytes: - return b"%s\r\n" % self._data + def end_replace(self, s: str): + s_encoded = s.encode("utf8") + s_len = len(s_encoded) + + removed = self._data[-s_len:].decode("utf8") + self._truncated = removed+self._truncated + self._data = self._data[:-s_len]+s_encoded -- cgit v1.3.1-10-gc9f91