mirror of
https://github.com/dgtlmoon/changedetection.io.git
synced 2026-09-29 00:36:18 +00:00
Follow-up to #4290. `watch.open_link` was read three times per watch list row (two hrefs plus the new title attribute). Each read re-runs `_resolve_link()`, which for a Jinja2 templated URL builds a fresh ImmutableSandboxedEnvironment - the cost the comment in validate_url.py already warns about. Hoisted to a single `{% set open_link = watch.open_link %}` alongside the other per-row lookups. `watch_open_url` was set from `watch.open_link`, which returns the string 'DISABLED' when the URL fails validation, so the default RSS body template (`RSS_TEMPLATE_HTML_DEFAULT`) rendered `<a href="DISABLED">` for those watches. Now falls back to the raw URL, matching the neighbouring `watch_url` token. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>