Implement LAST, NEXT commands

This commit is contained in:
XANTRONIX Development 2024-11-26 12:08:56 -05:00
parent ee1adcf1ac
commit 97078ffede

View file

@ -191,6 +191,60 @@ class Session():
return self.respond(ResponseCode.NNTP_GROUP_LISTING, text) return self.respond(ResponseCode.NNTP_GROUP_LISTING, text)
def _cmd_last(self):
if self.newsgroup is None:
return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
if self.article_id is None:
return self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
sql = """
select
max(id)
from
newsgroup_message
where
newsgroup_id = ?
and id < ?
"""
cr = self.db.execute(sql, (self.newsgroup.id, self.article_id))
row = cr.fetchone()
if row is None or row[0] is None:
return self.respond(ResponseCode.NNTP_ARTICLE_NO_PREVIOUS)
self.article_id = row[0]
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE)
def _cmd_next(self):
if self.newsgroup is None:
return self.respond(ResponseCode.NNTP_NEWSGROUP_NOT_SELECTED)
if self.article_id is None:
return self.respond(ResponseCode.NNTP_ARTICLE_INVALID_NUMBER)
sql = """
select
min(id)
from
newsgroup_message
where
newsgroup_id = ?
and id > ?
"""
cr = self.db.execute(sql, (self.newsgroup.id, self.article_id))
row = cr.fetchone()
if row is None or row[0] is None:
return self.respond(ResponseCode.NNTP_ARTICLE_NO_NEXT)
self.article_id = row[0]
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE)
def _newsgroup_summary(self, newsgroup: Newsgroup) -> str: def _newsgroup_summary(self, newsgroup: Newsgroup) -> str:
sql = """ sql = """
select select
@ -587,6 +641,8 @@ class Session():
'CAPABILITIES': _cmd_capabilities, 'CAPABILITIES': _cmd_capabilities,
'MODE': _cmd_mode, 'MODE': _cmd_mode,
'GROUP': _cmd_group, 'GROUP': _cmd_group,
'LAST': _cmd_last,
'NEXT': _cmd_next,
'LISTGROUP': _cmd_listgroup, 'LISTGROUP': _cmd_listgroup,
'LIST': _cmd_list, 'LIST': _cmd_list,
'NEWNEWS': _cmd_newnews, 'NEWNEWS': _cmd_newnews,