feat: wire tracking-config display filters + per-tracker adaptive polling
Display filters (Immich tracking config): - favorites_only drops events with no favorited new assets, or filters added_assets to favorites only - assets_order_by/assets_order sort the rendered list (date / name / rating / random / none) - max_assets_to_show caps rendered+attached media (default 5 -> 10) - include_tags strips people from event extras and tags from each asset - include_asset_details strips city/country/state/lat/lon/is_favorite/ rating/description; load-bearing fields (thumbhash, file_size, playback_size, cache keys) preserved - New apply_tracking_display_filters helper in dispatch_helpers; wired into watcher, webhooks, scheduled/periodic/memory, and manual test-dispatch - Targets sharing a TrackingConfig dispatch together; targets with different TCs each see their own shaped event Adaptive polling: - Replace NotificationTracker.batch_duration with adaptive_max_skip - Per-tracker opt-in: NULL/0 disables back-off (every tick runs); positive N caps the skip factor at (N-1)-in-N after long idle - Scheduler caches the cap in module state for the tick fast-path - Migration adds the new column; API schemas/responses, frontend types, i18n, and the tracker form updated to match
This commit is contained in:
@@ -166,11 +166,25 @@ async def dispatch_test_notification(
|
||||
}
|
||||
|
||||
# Dispatch each event to the same target (per-album fan-out sends N messages).
|
||||
# Apply display filters so the test notification matches production behavior
|
||||
# for ``favorites_only``, ``include_tags``, ``include_asset_details``, etc.
|
||||
from .dispatch_helpers import apply_tracking_display_filters
|
||||
|
||||
url_cache, asset_cache = await _get_telegram_caches()
|
||||
dispatcher = NotificationDispatcher(url_cache=url_cache, asset_cache=asset_cache)
|
||||
all_results: list[dict[str, Any]] = []
|
||||
for event in events:
|
||||
results = await dispatcher.dispatch(event, [target_cfg])
|
||||
shaped_event = apply_tracking_display_filters(event, tracking_config)
|
||||
if shaped_event is None:
|
||||
all_results.append({
|
||||
"success": False,
|
||||
"error": (
|
||||
"Event suppressed by tracking config (favorites_only is on "
|
||||
"but no added assets are favorites)."
|
||||
),
|
||||
})
|
||||
continue
|
||||
results = await dispatcher.dispatch(shaped_event, [target_cfg])
|
||||
if results:
|
||||
all_results.append(results[0])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user