github connorgallopo/Tracearr v1.4.23

6 hours ago

Tracearr v1.4.23 - Pause Detection, Public Activity API, and Session Reliability

Pause Detection Rules

New rule conditions for paused sessions:

  • Current Pause Duration - Trigger rules when a session has been continuously paused beyond a threshold (e.g., paused for 15+ minutes)
  • Total Pause Duration - Trigger rules based on total accumulated pause time across all pause/resume cycles in a session

Rules re-evaluate on every poll while a session is paused, so actions fire as soon as the threshold is crossed. Works across both SSE (Plex) and poller paths.

Public Activity API

New /api/v1/public/activity endpoint. Six datasets in a single call:

  • Plays over time (bucketed by 6h for week, 1d for month/year)
  • Peak concurrent streams broken down by direct play / direct stream / transcode
  • Day-of-week and hour-of-day distributions
  • Platform usage
  • Playback quality breakdown

Supports period (week/month/year), serverId filter, and timezone for proper date bucketing. Full OpenAPI spec in Swagger.

Also added: version field in /health response, and the stats queries behind the internal dashboard now share the same SQL with the public API.

Jellyfin / Emby Session Identity

Rewrote how Jellyfin and Emby sessions are tracked internally. Sessions now use compound keys (user + device + media) instead of the external session ID, matching how Plex already worked. Fixes several issues where JF/Emby sessions would ghost, duplicate, or fail to stop properly — especially when the media server recycles session IDs across different users or devices.

Termination cooldowns also use the new composite keys so kills actually stick on JF/Emby.

Adaptive Polling

The poller now runs at 3s when sessions are active and drops to 10s when idle. Previously it was a flat 7s regardless. Reduces unnecessary load when nothing is streaming.

Mobile

  • Multi-server dashboard - Dashboard now supports viewing all servers at once with color-coded Now Playing cards and map markers
  • Server selector - Updated behavior across all screens, not just the dashboard
  • VPN/Tailscale fix - New Expo config plugin that configures NSURLSession to wait for VPN tunnel readiness on iOS instead of failing immediately. Fixes connections over Tailscale and similar VPN setups
  • Session revocation - Revoking a mobile session now blacklists the device token and force-disconnects the socket immediately. Previously the JWT stayed valid until expiry
  • Token handling - Access token expiry shortened from 7d to 24h. Refresh token rotation is now atomic in Redis

Trust Score Editing

Trust scores can now be edited directly from the User Detail page. Dialog with live badge preview showing where the new score falls.

User Detail Sessions Table

Replaced the custom sessions table on the User Detail page with the shared HistoryTable component. Clicking a session row opens the full detail sheet with stream info, geo data, and playback quality — same view as the History page.

Now Playing Cards

  • Quality badges (Direct Play / Direct Stream / Transcode) are now icon-only with tooltips to save space
  • HW transcode gets its own label distinct from software transcode
  • Server color accent changed from overlay div to inset box-shadow
  • Better truncation on long usernames

Play Count Accuracy

Session counts throughout the app (dashboard, public API, user stats) now deduplicate pause/resume chains. A session that pauses and resumes multiple times counts as one play instead of inflating the number.

Server Reachability

Health check now tracks consecutive failures and only marks a server as down after 3 in a row. Reduces false alarms from transient network blips.

Library Sync

  • Incremental syncs now rebuild snapshots from the database after upserting items, so Media Statistics charts stay current without waiting for the next full scan
  • Snapshot rebuild failures are caught independently — won't roll back an otherwise successful sync

Fixes

  • Plex SSE processor not tracking pause state or re-evaluating pause rules during SSE updates
  • Jellyfin message endpoint returning 415 — switched from query params to JSON body
  • Paused sessions not counted in buffer/concurrent stream totals
  • Pending session Redis TTL too short — sessions that paused during the confirmation window would expire before confirming
  • Transcode re-eval actions only firing on initial violation, not on subsequent re-evaluations where dedup returned null
  • Mobile connection revoke not actually disconnecting the client
  • Public user stats endpoint errors
  • Library sync edge cases

Thanks for your continued feedback and support!

Don't miss a new Tracearr release

NewReleases is sending notifications on new releases.