From 0dc58bcd88beb063f3bc1c340ee84df94378cabc Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Mon, 25 Nov 2024 17:18:38 -0500 Subject: [PATCH] Implement LIST ACTIVE --- lib/nntp/tiny/session.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/lib/nntp/tiny/session.py b/lib/nntp/tiny/session.py index 08e4dc7..7d71670 100644 --- a/lib/nntp/tiny/session.py +++ b/lib/nntp/tiny/session.py @@ -263,8 +263,41 @@ class Session(): return self.end() + def _newsgroup_last_active(self, newsgroup: Newsgroup): + sql = """ + select + max(created_on) + from + newsgroup_message + where + newsgroup_id = ? + """ + + cr = self.db.execute(sql, (newsgroup.id,)) + row = cr.fetchone() + + if row is None: + return + + return datetime.datetime.fromisoformat(row[0]) + + def _cmd_list_active(self): + now = datetime.datetime.now(datetime.UTC) + + self.respond(ResponseCode.NNTP_INFORMATION_FOLLOWS) + + for name in self.server.newsgroups: + newsgroup = self.server.newsgroups[name] + last_active = self._newsgroup_last_active(newsgroup) + + if now - last_active < datetime.timedelta(days=1): + self.print_newsgroup(newsgroup) + + return self.end() + LIST_SUBCOMMANDS = { 'NEWSGROUPS': _cmd_list_newsgroups, + 'ACTIVE': _cmd_list_active, } def _cmd_list(self, *args):