From afc5ce83393d59aba6868fef4595d4a198ff4455 Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 5 Jan 2025 23:50:50 -0500 Subject: [PATCH] Comments, improvements --- lib/xenu_nntp/mbox.py | 55 +++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 23 deletions(-) diff --git a/lib/xenu_nntp/mbox.py b/lib/xenu_nntp/mbox.py index e7a96ea..ca3b966 100644 --- a/lib/xenu_nntp/mbox.py +++ b/lib/xenu_nntp/mbox.py @@ -6,32 +6,21 @@ class MBoxReaderError(Exception): class MBoxReaderBuffer(): def __init__(self): self.lines = [None, None, None, None] - self.index = None def add(self, line: str): if self.lines[0] is None: self.lines[0] = line - self.index = 0 elif self.lines[1] is None: self.lines[1] = line - self.index = 1 elif self.lines[2] is None: self.lines[2] = line - self.index = 2 elif self.lines[3] is None: self.lines[3] = line - self.index = 3 else: self.lines[0] = self.lines[1] self.lines[1] = self.lines[2] self.lines[2] = self.lines[3] self.lines[3] = line - self.index = 3 - - if self.index is None: - self.index = 0 - elif self.index < 3: - self.index += 1 def is_empty_line(self, line): return self.lines[line] == '\n' @@ -45,7 +34,7 @@ class MBoxReaderBuffer(): def is_start(self): if self.lines[0] is None or self.lines[1] is None: return False - + if self.is_from_line(0) \ and self.is_header_line(1) \ and self.lines[2] is None \ @@ -73,6 +62,9 @@ class MBoxReader(): while True: line = self.fh.readline() + # + # We have reached the final message in the stream. + # if line is None or line == '': ret = self.message ret.finish() @@ -85,23 +77,40 @@ class MBoxReader(): self.line += 1 + # + # Load the line in the circular mbox state buffer. + # self.buf.add(line) + ret = None + + # + # If we are at the start of a new message... + # if self.buf.is_start(): - if self.message is None: - self.message = Message() - self.message.readline(line) - else: + if self.message is not None: + # + # If we already have a message, return it. + # ret = self.message - ret.finish() - self.message = Message() - self.message.readline(line) + # + # ...Prepare a new message object. + # + self.message = Message() - return ret - else: - if self.message: - self.message.readline(line) + if self.message is not None: + # + # Buffer the line into the current message. + # + self.message.readline(line) + + # + # Return the message if we have one. + # + if ret: + ret.finish() + return ret def messages(self): while True: