nntp: keep in memory latests news seen to avoid loop
This commit is contained in:
parent
d56c2396c0
commit
f17f8b9dfa
@ -50,6 +50,7 @@ def read_article(msg_id, **server):
|
||||
|
||||
|
||||
servers_lastcheck = dict()
|
||||
servers_lastseen = dict()
|
||||
|
||||
def whatsnew(group="*", **server):
|
||||
fill = dict()
|
||||
@ -64,6 +65,9 @@ def whatsnew(group="*", **server):
|
||||
else:
|
||||
date_last_check = datetime.now()
|
||||
|
||||
if idx not in servers_lastseen:
|
||||
servers_lastseen[idx] = []
|
||||
|
||||
with NNTP(**fill) as srv:
|
||||
response, servers_lastcheck[idx] = srv.date()
|
||||
|
||||
@ -73,9 +77,15 @@ def whatsnew(group="*", **server):
|
||||
|
||||
response, articles = srv.newnews(group, date_last_check)
|
||||
for msg_id in articles:
|
||||
if msg_id not in servers_lastseen[idx]:
|
||||
servers_lastseen[idx].append(msg_id)
|
||||
response, info = srv.article(msg_id)
|
||||
yield email.message_from_bytes(b"\r\n".join(info.lines))
|
||||
|
||||
# Clean huge lists
|
||||
if len(servers_lastseen[idx]) > 42:
|
||||
servers_lastseen[idx] = servers_lastseen[idx][23:]
|
||||
|
||||
|
||||
def format_article(art, **response_args):
|
||||
art["X-FromName"], art["X-FromEmail"] = parseaddr(art["From"] if "From" in art else "")
|
||||
|
Loading…
x
Reference in New Issue
Block a user