v1.4.2: 修复日报/定制汇总重复发送刷屏(_maybe_daily元组嵌套bug+发送日期持久化) + 一键全部启用/停用 + 数据源快速筛选

This commit is contained in:
2026-08-31 12:27:35 +08:00
parent c9671880e8
commit 3f6abe7ad6
5 changed files with 91 additions and 14 deletions
+15 -9
View File
@@ -147,11 +147,16 @@ def send_custom_summary():
return notifier.send_custom_summary(articles, label)
def _maybe_daily(now, last_day, time_key, send_fn, kind):
"""到点触发的通用逻辑。time_key 存 'HH:MM'send_fn 返回发送条数。"""
def _maybe_daily(now, last_day, time_key, send_fn, kind, persist_key):
"""到点触发的通用逻辑。time_key 存 'HH:MM'send_fn 返回发送条数。
last_day 存上次发送的日期字符串 'YYYY-MM-DD'None=尚未发送)。
修复:每天只发一次——last_day 必须是纯字符串,不能嵌套元组;
并把已发送日期持久化到 settings,服务重启后也不会当天重复发。"""
day_key = now.strftime("%Y-%m-%d")
if last_day[0] == day_key:
return last_day
if last_day is None:
last_day = db.get_setting(persist_key, "")
if last_day == day_key:
return last_day # 今天已发过,不再发
hm = str(db.get_setting(time_key, config.AUTO_DEFAULTS.get(time_key) or
config.CUSTOM_DEFAULTS.get(time_key) or "10:00"))
try:
@@ -161,7 +166,8 @@ def _maybe_daily(now, last_day, time_key, send_fn, kind):
if now.strftime("%H:%M") >= hm and now.hour >= hh:
try:
send_fn()
last_day = (day_key,)
db.set_setting(persist_key, day_key)
return day_key
except Exception as e:
db.add_log(kind, f"{time_key} 汇总异常", 0, [], status="error", detail=str(e))
notifier.report_error("汇总", f"{time_key} 汇总发送异常", str(e)[:300])
@@ -174,10 +180,10 @@ def scheduler_loop(stop_event):
while not stop_event.is_set():
now = datetime.now()
try:
last_summary_day = _maybe_daily(now, (last_summary_day,), "summary_time",
send_daily_summary, "summary")
last_custom_summary_day = _maybe_daily(now, (last_custom_summary_day,), "custom_summary_time",
send_custom_summary, "custom_summary")
last_summary_day = _maybe_daily(now, last_summary_day, "summary_time",
send_daily_summary, "summary", "summary_last_day")
last_custom_summary_day = _maybe_daily(now, last_custom_summary_day, "custom_summary_time",
send_custom_summary, "custom_summary", "custom_summary_last_day")
except Exception as e:
notifier.report_error("汇总", "定时汇总检查异常", str(e)[:300])
# 采集到期数据源(每源独立周期)