Implement HDR command
This commit is contained in:
parent
4eecca8630
commit
49968be522
1 changed files with 34 additions and 1 deletions
|
@ -471,6 +471,38 @@ class Session():
|
||||||
def _cmd_article(self, identifier: Optional[str]=None):
|
def _cmd_article(self, identifier: Optional[str]=None):
|
||||||
return self._serve_message(MessagePart.WHOLE, identifier)
|
return self._serve_message(MessagePart.WHOLE, identifier)
|
||||||
|
|
||||||
|
def _send_message_header(self, message: Message, name: str):
|
||||||
|
return self.print("%d %s" % (
|
||||||
|
message.id, message.headers.get(name, '')
|
||||||
|
))
|
||||||
|
|
||||||
|
def _cmd_hdr(self, name: str, msg: Optional[str]=None):
|
||||||
|
if self.newsgroup is None:
|
||||||
|
return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
|
||||||
|
|
||||||
|
if msg is None:
|
||||||
|
if self.article_id is None:
|
||||||
|
return self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
|
||||||
|
|
||||||
|
message = self.db.get(Message, self.article_id)
|
||||||
|
|
||||||
|
self.respond(ResponseCode.NNTP_HEADERS_FOLLOW)
|
||||||
|
self._send_message_header(message, name)
|
||||||
|
else:
|
||||||
|
msgrange = MessageRange.parse(msg)
|
||||||
|
|
||||||
|
sql = f"select * from {Message.name} where "
|
||||||
|
sql += " newsgroup_id = ? and " + msgrange.where()
|
||||||
|
|
||||||
|
cr = self.db.query_sql(Message, sql, (self.newsgroup.id,))
|
||||||
|
|
||||||
|
self.respond(ResponseCode.NNTP_HEADERS_FOLLOW)
|
||||||
|
|
||||||
|
for message in cr.each():
|
||||||
|
self._send_message_header(message, name)
|
||||||
|
|
||||||
|
return self.end()
|
||||||
|
|
||||||
COMMANDS = {
|
COMMANDS = {
|
||||||
'CAPABILITIES': _cmd_capabilities,
|
'CAPABILITIES': _cmd_capabilities,
|
||||||
'GROUP': _cmd_group,
|
'GROUP': _cmd_group,
|
||||||
|
@ -480,7 +512,8 @@ class Session():
|
||||||
'NEWGROUPS': _cmd_newgroups,
|
'NEWGROUPS': _cmd_newgroups,
|
||||||
'HEAD': _cmd_head,
|
'HEAD': _cmd_head,
|
||||||
'BODY': _cmd_body,
|
'BODY': _cmd_body,
|
||||||
'ARTICLE': _cmd_article
|
'ARTICLE': _cmd_article,
|
||||||
|
'HDR': _cmd_hdr,
|
||||||
}
|
}
|
||||||
|
|
||||||
def handle(self):
|
def handle(self):
|
||||||
|
|
Loading…
Add table
Reference in a new issue