diff --git a/lib/nntp/tiny/mbox.py b/lib/nntp/tiny/mbox.py index 981c609..af6a9f9 100644 --- a/lib/nntp/tiny/mbox.py +++ b/lib/nntp/tiny/mbox.py @@ -62,23 +62,26 @@ class MBoxMessageState(enum.Enum): BODY = 2 class MBoxMessage(): - __slots__ = 'state', 'headers', 'line', 'body', 'key', + __slots__ = 'state', 'headers', 'line', 'content', 'body', 'key', def __init__(self): self.state = MBoxMessageState.EMPTY self.headers = dict() self.line = None - self.body = '' + self.content = '' + self.body = None self.key = None def add(self, line: str): + if self.line is not None: + self.content += self.line + if self.state is MBoxMessageState.EMPTY: self.state = MBoxMessageState.HEADER if self.state is MBoxMessageState.HEADER: if line == '\n' or line == '\r\n': self.state = MBoxMessageState.BODY - self.body = '' elif line[0] == ' ' or line[0] == '\t': self.headers[self.key] += ' ' + line.strip() else: @@ -89,15 +92,15 @@ class MBoxMessage(): self.headers[self.key] = match[2].rstrip() elif self.state is MBoxMessageState.BODY: - if self.line is None: - self.body = line + if self.body is None: + self.body = '' else: self.body += self.line - self.line = line + self.line = line def is_first_line(self): - return len(self.headers) == 1 and self.body == '' + return len(self.headers) == 1 and (self.body == '' or self.body is None) @staticmethod def each_line(text: str):