nntp: use timestamp from servers to handle desynchronized clocks
This commit is contained in:
parent
aee2da4122
commit
b369683914
@ -49,14 +49,24 @@ def read_article(msg_id, **server):
|
|||||||
return email.message_from_bytes(b"\r\n".join(info.lines), policy=email.policy.SMTPUTF8)
|
return email.message_from_bytes(b"\r\n".join(info.lines), policy=email.policy.SMTPUTF8)
|
||||||
|
|
||||||
|
|
||||||
def whatsnew(date_last_check, group="*", **server):
|
servers_lastcheck = dict()
|
||||||
|
|
||||||
|
def whatsnew(group="*", **server):
|
||||||
fill = dict()
|
fill = dict()
|
||||||
if "user" in server: fill["user"] = server["user"]
|
if "user" in server: fill["user"] = server["user"]
|
||||||
if "password" in server: fill["password"] = server["password"]
|
if "password" in server: fill["password"] = server["password"]
|
||||||
if "host" in server: fill["host"] = server["host"]
|
if "host" in server: fill["host"] = server["host"]
|
||||||
if "port" in server: fill["port"] = server["port"]
|
if "port" in server: fill["port"] = server["port"]
|
||||||
|
|
||||||
|
idx = _indexServer(**server)
|
||||||
|
if idx in servers_lastcheck and servers_lastcheck[idx] is not None:
|
||||||
|
date_last_check = servers_lastcheck[idx]
|
||||||
|
else:
|
||||||
|
date_last_check = datetime.now()
|
||||||
|
|
||||||
with NNTP(**fill) as srv:
|
with NNTP(**fill) as srv:
|
||||||
|
response, servers_lastcheck[idx] = srv.date()
|
||||||
|
|
||||||
response, groups = srv.newgroups(date_last_check)
|
response, groups = srv.newgroups(date_last_check)
|
||||||
for g in groups:
|
for g in groups:
|
||||||
yield g
|
yield g
|
||||||
@ -92,13 +102,12 @@ def _indexServer(**kwargs):
|
|||||||
return "{user}:{password}@{host}:{port}".format(**kwargs)
|
return "{user}:{password}@{host}:{port}".format(**kwargs)
|
||||||
|
|
||||||
def _newevt(**args):
|
def _newevt(**args):
|
||||||
context.add_event(ModuleEvent(call=partial(_fini, **args), interval=42))
|
context.add_event(ModuleEvent(call=partial(_ticker, **args), interval=42))
|
||||||
|
|
||||||
def _fini(to_server, to_channel, lastcheck, group, server):
|
def _ticker(to_server, to_channel, group, server):
|
||||||
print("fini called")
|
_newevt(to_server=to_server, to_channel=to_channel, group=group, server=server)
|
||||||
_newevt(to_server=to_server, to_channel=to_channel, group=group, lastcheck=datetime.now(), server=server)
|
|
||||||
n = 0
|
n = 0
|
||||||
for art in whatsnew(lastcheck, group, **server):
|
for art in whatsnew(group, **server):
|
||||||
n += 1
|
n += 1
|
||||||
if n > 10:
|
if n > 10:
|
||||||
continue
|
continue
|
||||||
@ -106,10 +115,8 @@ def _fini(to_server, to_channel, lastcheck, group, server):
|
|||||||
if n > 10:
|
if n > 10:
|
||||||
context.send_response(to_server, Response("... and %s others news" % (n - 10), channel=to_channel))
|
context.send_response(to_server, Response("... and %s others news" % (n - 10), channel=to_channel))
|
||||||
|
|
||||||
def watch(to_server, to_channel, group="*", lastcheck=None, **server):
|
def watch(to_server, to_channel, group="*", **server):
|
||||||
if lastcheck is None:
|
_newevt(to_server=to_server, to_channel=to_channel, group=group, server=server)
|
||||||
lastcheck = datetime.now()
|
|
||||||
_newevt(to_server=to_server, to_channel=to_channel, group=group, lastcheck=lastcheck, server=server)
|
|
||||||
|
|
||||||
|
|
||||||
# MODULE INTERFACE ####################################################
|
# MODULE INTERFACE ####################################################
|
||||||
|
Loading…
x
Reference in New Issue
Block a user