diff --git a/db/newsgroup.sql b/db/newsgroup.sql index 5f18afe..fc86142 100644 --- a/db/newsgroup.sql +++ b/db/newsgroup.sql @@ -12,6 +12,7 @@ create table newsgroup_message ( created_on DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, newsgroup_id INTEGER NOT NULL, message_id TEXT NOT NULL UNIQUE, + parent_id TEXT, sender TEXT NOT NULL, subject TEXT NOT NULL, content TEXT NOT NULL, diff --git a/lib/nntp/tiny/message.py b/lib/nntp/tiny/message.py index 58c3568..1d345ce 100644 --- a/lib/nntp/tiny/message.py +++ b/lib/nntp/tiny/message.py @@ -24,14 +24,24 @@ class MessageState(enum.Enum): BODY = 2 class Message(DatabaseTable): - __slots__ = 'newsgroup_id', 'state', 'headers', 'line', 'content', 'body', '_key', + __slots__ = ( + 'id', + 'newsgroup_id', + 'state', + 'headers', + 'line', + 'content', + 'body', + '_key' + ) name = 'newsgroup_message' key = 'id' columns = ( 'newsgroup_id', - 'message_id', 'created_on', + 'message_id', + 'parent_id', 'sender', 'subject', 'content' @@ -41,6 +51,7 @@ class Message(DatabaseTable): RE_MESSAGE_ID = re.compile(r'^<([^<>]+)>$') def __init__(self): + self.id = None self.newsgroup_id = None self.state = MessageState.EMPTY self.headers = dict() @@ -52,6 +63,7 @@ class Message(DatabaseTable): @staticmethod def __from_row__(row): message = Message() + message.id = row['id'] message.parse(row['content']) return message @@ -59,8 +71,9 @@ class Message(DatabaseTable): def __values__(self): return ( self.newsgroup_id, - self.id(), self.date(), + self.unique_id(), + self.header('references'), self.sender(), self.subject(), self.content @@ -96,7 +109,7 @@ class Message(DatabaseTable): def header(self, key: str): return self.headers.get(key.lower()) - def id(self) -> str: + def unique_id(self) -> str: match = self.RE_MESSAGE_ID.match(self.header('Message-ID')) return match[1]