Make NEWGROUPS honor date, time

This commit is contained in:
XANTRONIX Development 2024-12-04 23:52:29 -05:00
parent b6225bb329
commit 0d41ea1d2b
2 changed files with 23 additions and 10 deletions

View file

@ -3,10 +3,13 @@ import socket
import ssl
import datetime
from typing import Optional
from nntp.tiny.socket import Connection
from nntp.tiny.host import Host
from nntp.tiny.response import Response, ResponseCode
from nntp.tiny.remote import RemoteNewsgroup
from nntp.tiny.message import MessageRange
class ClientException(Exception):
pass

View file

@ -199,19 +199,27 @@ class Session(Connection):
return self.respond(ResponseCode.NNTP_ARTICLE_STAT_RESPONSE)
def _newsgroup_summary(self, newsgroup: Newsgroup) -> str:
def _newsgroup_summary(self, newsgroup: Newsgroup, since: Optional[datetime.datetime]=None) -> str:
sql = """
select
count(message_id),
min(message_id),
max(message_id)
count(newsgroup_message.message_id),
min(newsgroup_message.message_id),
max(newsgroup_message.message_id)
from
newsgroup_message
newsgroup_message,
message
where
newsgroup_id = ?
message.id = newsgroup_message.message_id
and newsgroup_message.newsgroup_id = ?
"""
cr = self.db.execute(sql, (newsgroup.id,))
values = [newsgroup.id]
if since is not None:
sql += " and message.created_on >= ?"
values.append(since.isoformat())
cr = self.db.execute(sql, values)
row = cr.fetchone()
return {
@ -269,8 +277,8 @@ class Session(Connection):
return self.end()
def print_newsgroup(self, newsgroup: Newsgroup):
summary = self._newsgroup_summary(newsgroup)
def print_newsgroup(self, newsgroup: Newsgroup, since: Optional[datetime.datetime]=None):
summary = self._newsgroup_summary(newsgroup, since)
return self.print("%s %d %d %s" % (
summary['name'],
@ -485,13 +493,15 @@ class Session(Connection):
elif len(args) > 1:
return self.respond(ResponseCode.NNTP_SYNTAX_ERROR, "Too many arguments")
timestamp = self._parse_date_time(datestr, timestr)
self.respond(ResponseCode.NNTP_GROUPS_NEW_FOLLOW)
for name in self.server.newsgroups:
if fnmatch.fnmatch(name, wildmat):
newsgroup = self.server.newsgroups[name]
self.print_newsgroup(newsgroup)
self.print_newsgroup(newsgroup, timestamp)
return self.end()