perf(mail): Roh-Byte-Vorfilter in search_mail -- grep-Tempo ueber grosse Maildirs
Nur Mails voll parsen, deren Rohtext den Suchbegriff enthaelt. Suche ueber ~13k Mails jetzt ~17s statt >120s (Deadline) und findet auch grosse Ordner (Trash). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XhHNJKk3RsHgUsJ27WQSom
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
3ccfb80115
commit
330e0113f8
+19
-4
@@ -248,12 +248,30 @@ def search_mail(
|
|||||||
md = _open_folder(acct_path, fld)
|
md = _open_folder(acct_path, fld)
|
||||||
if not md:
|
if not md:
|
||||||
continue
|
continue
|
||||||
for key, msg in _iter_messages(md):
|
qbytes = query_lower.encode("utf-8", "ignore")
|
||||||
|
try:
|
||||||
|
keys = list(md.keys())
|
||||||
|
except Exception:
|
||||||
|
keys = []
|
||||||
|
for key in keys:
|
||||||
|
if time.monotonic() - t0 > DEADLINE_S:
|
||||||
|
truncated = True
|
||||||
|
break
|
||||||
|
# Schneller Roh-Byte-Vorfilter: nur Mails voll parsen, die den
|
||||||
|
# Suchbegriff im Rohtext enthalten (grep-Tempo statt 13k Voll-Parses).
|
||||||
try:
|
try:
|
||||||
|
raw = md.get_bytes(key)
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
if qbytes not in raw.lower():
|
||||||
|
continue
|
||||||
|
try:
|
||||||
|
msg = md.get_message(key)
|
||||||
subj = _decode_hdr(msg.get("Subject", ""))
|
subj = _decode_hdr(msg.get("Subject", ""))
|
||||||
frm = _decode_hdr(msg.get("From", ""))
|
frm = _decode_hdr(msg.get("From", ""))
|
||||||
to = _decode_hdr(msg.get("To", ""))
|
to = _decode_hdr(msg.get("To", ""))
|
||||||
date_str = msg.get("Date", "")
|
date_str = msg.get("Date", "")
|
||||||
|
# Bestaetigen ueber dekodierte Header ODER Body (Roh-Treffer verifizieren)
|
||||||
if query_lower not in f"{subj} {frm} {to}".lower():
|
if query_lower not in f"{subj} {frm} {to}".lower():
|
||||||
if query_lower not in _get_body(msg).lower():
|
if query_lower not in _get_body(msg).lower():
|
||||||
continue
|
continue
|
||||||
@@ -263,9 +281,6 @@ def search_mail(
|
|||||||
if len(matches) >= MAX_SCAN:
|
if len(matches) >= MAX_SCAN:
|
||||||
truncated = True
|
truncated = True
|
||||||
break
|
break
|
||||||
if time.monotonic() - t0 > DEADLINE_S:
|
|
||||||
truncated = True
|
|
||||||
break
|
|
||||||
if truncated:
|
if truncated:
|
||||||
break
|
break
|
||||||
if truncated:
|
if truncated:
|
||||||
|
|||||||
Reference in New Issue
Block a user