Implement LAST, NEXT commands
This commit is contained in:
parent
ee1adcf1ac
commit
97078ffede
1 changed files with 56 additions and 0 deletions
|
@ -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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue