/// Centralized HTTP timeout constants for both backends. The same /// [MediaServerHttpClient] wrapper is used by Plex and Jellyfin clients — /// timeouts are kept here so the budgets per phase are visible at a /// glance. class MediaServerTimeouts { static const connect = Duration(seconds: 10); static const receive = Duration(seconds: 120); /// Retry budget for home `/hubs` startup calls. These endpoints can be slow /// while Plex wakes idle disks, but should not block forever. static const homeHubAttemptTimeouts = [Duration(seconds: 10), Duration(seconds: 5), Duration(milliseconds: 2500)]; /// Retry budget for per-library home hub rows (`/hubs/sections/{id}`). These /// can be slower than the top-level home hub call on remote Plex servers. static const libraryHubAttemptTimeouts = [Duration(seconds: 10), Duration(seconds: 8), Duration(seconds: 5)]; /// Timeout for probing a cached/preferred endpoint before falling back to /// the full candidate race (used in [PlexServer.findBestWorkingConnection]). static const preferredEndpointProbe = Duration(milliseconds: 1500); /// Timeout for the connection race where all candidates are tested in /// parallel (used in [PlexServer.findBestWorkingConnection]). static const connectionRace = Duration(seconds: 2); /// Per-server connection budget: preferred probe + race + HTTPS upgrade /// attempt + 1s buffer. static const perServerConnect = Duration(milliseconds: 1500 + 2000 + 2000 + 1000); /// HTTP timeout for the live-TV tune POST. Matches Plex web's value — the /// default 10s connect budget is too tight on Fire-TV cold starts. static const tune = Duration(seconds: 30); static const plexTvConnect = Duration(seconds: 15); static const plexTvReceive = Duration(seconds: 10); /// Probe + token-validate timeout — Jellyfin servers respond fast on /// `/System/Info/Public` and `/Users/Me`. static const jellyfinProbe = Duration(seconds: 8); /// Best-effort `/Sessions/Logout` timeout — short because the call is /// fire-and-forget; the token is removed locally regardless. static const jellyfinSignOut = Duration(seconds: 5); }