From a38b8ce8c127e8efecdad5caef57a524c1650dda Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 1 Sep 2026 12:04:12 +0200 Subject: [PATCH] scheduler: process newest UIDs first to prioritize fresh mail The per-rule batch was sliced from all_uids in server order (oldest UID first), so with a big backlog the scheduler chewed through years of unmatched newsletters before reaching the current invoices the user was actually waiting on. Sort new_uids descending by int (with a plain reverse() fallback for non-numeric UIDs) so each poll picks the newest 500 first. Old backlog still gets worked off in the background. Co-Authored-By: Claude Opus 4.7 (1M context) --- app/services/scheduler.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/services/scheduler.py b/app/services/scheduler.py index 7ed78d4..70d52e3 100644 --- a/app/services/scheduler.py +++ b/app/services/scheduler.py @@ -115,7 +115,15 @@ def _poll_account_sync(account_id: int) -> None: .all() ) + # Neueste UIDs zuerst — sonst arbeitet der Scheduler bei großem + # Backlog erst durch Jahre alte Newsletter, bevor er aktuelle + # Rechnungen erreicht. UIDs sind auf IMAP-Servern monoton + # steigend, daher sortiert reverse-int zuverlässig neu→alt. new_uids = [uid for uid in all_uids if uid not in processed_uids] + try: + new_uids.sort(key=int, reverse=True) + except (ValueError, TypeError): + new_uids.reverse() if not new_uids: write_log(