This commit is contained in:
2026-01-17 21:32:44 -08:00
parent 193fa5aec3
commit 3f874af54a
4 changed files with 329 additions and 112 deletions

View File

@@ -1071,6 +1071,25 @@ class Folder(Store):
if namespace == "url":
pattern_hint = kwargs.get("pattern_hint")
def _pattern_candidates(raw: Any) -> List[str]:
if raw is None:
return []
if isinstance(raw, (list, tuple, set)):
out: List[str] = []
for item in raw:
text = str(item or "").strip()
if text and text not in out:
out.append(text)
return out
if isinstance(raw, str):
text = raw.strip()
return [text] if text else []
return []
pattern_candidates = _pattern_candidates(pattern_hint)
if len(pattern_candidates) > 200:
pattern_candidates = pattern_candidates[:200]
def _parse_url_value(raw: Any) -> list[str]:
if raw is None:
return []
@@ -1094,16 +1113,26 @@ class Folder(Store):
return []
def _matches_pattern(url_list: list[str]) -> bool:
if not pattern_hint:
if not pattern_candidates:
return True
for candidate_url in url_list:
if _match_url_pattern(candidate_url, pattern_hint):
return True
for pat in pattern_candidates:
if _match_url_pattern(candidate_url, pat):
return True
return False
if not pattern or pattern == "*":
debug(f"[folder:{backend_label}] url search: any-url (limit={limit})")
rows = api.get_files_with_any_url(limit)
if pattern_candidates:
debug(
f"[folder:{backend_label}] url search: any-url (limit={limit}) pattern_hint={len(pattern_candidates)}"
)
rows = api.get_files_by_url_like_any(
[_url_like_pattern(p) for p in pattern_candidates],
limit,
)
else:
debug(f"[folder:{backend_label}] url search: any-url (limit={limit})")
rows = api.get_files_with_any_url(limit)
else:
debug(
f"[folder:{backend_label}] url search: like={pattern} (limit={limit})"