♻️ Improved
- Dedicated WARN/ERROR ring buffer — the main 2000-record log ring is FIFO across all levels, so a chatty DEBUG source could scroll warnings out of the LogsView within minutes. A secondary 500-record ring now keeps WARN/ERROR records exclusively, queried when LogsView's level filter is set to "Warnings & errors" or "Errors only". The main ring still serves info/debug as before; the source filter dropdown unions sources from both rings so older warnings stay discoverable.
- LogsView level filter routes through the dedicated ring server-side — passing
minLeveltogetAppLoglets the server walk the dedicated ERROR/WARN ring when warn/error is selected, surfacing entries far older than the 2000-record main window. Replaces the previous client-side post-filter which depended on whatever happened to be in the main ring at fetch time. - Backward-walking log seed on startup — instead of replaying the last 2000 file lines (which would evict every WARN/ERROR if those were rare in the tail), the seeder now walks the file backwards filling two buckets independently: up to 2000 records for the main ring, up to 500 ERROR/WARN records for the important ring. Stops as soon as both fill, so scan cost stays bounded even on huge logs.
- LogsView timestamp format — drops millisecond precision from the visible row (kept in hover tooltip) and prepends a date when the record isn't from today:
HH:MM:SSfor today,MM-DD HH:MM:SSfor older same-year history,YYYY-MM-DD HH:MM:SSacross year boundaries.
🐛 Fixed
- qBittorrent 5.2.0 connection failure ("Login failed: Invalid credentials"). qBittorrent 5.2 renamed the session cookie from
SIDtoQBT_SID_<webUIPort>and dropped theOk.body in favor ofHTTP 204with empty content. The HTTP client now stores whatever cookie name the server returns (also handles 5.1.x's user-configurableWebAPISessionCookieNamepreference) and treats any 2xx response as success. Backward compatible with qBittorrent 5.1.4 and earlier (#48). - qBittorrent compat layer (Sonarr/Radarr/Prowlarr) —
pauseTorrentnow actually pauses the matching aMule download (was a no-op before),deleteTorrenthonors thedeleteFilesflag, and completed downloads now reportpausedUPstate so *arr cleanup correctly identifies them as ready for import (#42).