3.8 KiB
3.8 KiB
v0.2.4 (2026-04-22)
Telegram media cache rebuilt around thumbhash validation — asset cache entries now invalidate when the visual content changes, not after a fixed TTL — plus a settings-page overhaul (cache stats, clear button, timezone / locale pickers) and full mobile-nav parity with the desktop sidebar.
Features
Telegram media cache
- Thumbhash-validated asset cache — dispatcher builds an
asset.id → thumbhashresolver fromevent.added_assets(Immich already populatesthumbhashinextra) and passes it toTelegramClient. Asset-cache entries now invalidate on visual change rather than age. (2be608b) - Configurable cache cap & stats —
TelegramFileCachegets amax_entriesLRU cap (applies in both TTL and thumbhash modes),ttl_seconds <= 0disables TTL entirely, and astats()method exposes per-bucket counts / sizes / oldest+newest timestamps. New settings:telegram_asset_cache_max_entries(default 5000);telegram_cache_ttl_hoursdefault bumped48 → 720(30 days) and is now URL-only. (2be608b) - Cache admin endpoints —
GET /settings/telegram-cache/statsandPOST /settings/telegram-cache/clear.PUT /settingsnow soft-resets the in-memory caches when cache-shaping keys change (on-diskfile_ids preserved). (2be608b)
Settings page
- Cache stats card — per-bucket (URL / asset) counts, cumulative uploaded-to-Telegram byte size, oldest/newest timestamps, and a hint explaining what the size means. Clear-cache button behind a confirm modal. (2be608b)
- New
TimezoneSelectorandLocaleSelectorcomponents replace the raw inputs with IANA-aware searchable pickers. Max-entries input exposed; TTL range widened to0..8760hours (0= disabled). (2be608b)
Mobile nav
- Full sidebar parity in the More panel — now mirrors the desktop sidebar tree (groups + subnodes) so every destination is reachable from mobile. Previously the panel carried a hand-picked flat list that drifted behind newly-added routes. (2be608b)
- Safe-area handling — nav height uses
env(safe-area-inset-bottom); panel bottom +z-indexfixed so page content can no longer visually overlay the bottom bar. (2be608b)
Bug Fixes
update_settingsTypeError —any(await ... for ...)was an async generator (not an iterator) and raised at runtime; replaced with an explicit loop so settings updates actually commit. (2be608b)
Accessibility
- Password-manager association on the password-change form — hidden
usernamefield +autocompletehints on all three password inputs so browsers stop warning and password managers fill correctly. (2be608b) - Telegram webhook secret wrapped in a no-op form with
autocomplete=offto silence DOM/a11y warnings. (2be608b)
All Commits
- 2be608b — feat(cache): thumbhash-validated asset cache + settings UX overhaul (alexei.dolgolyov)