From real use: a show on Jellyfin read "not in AnimeFlow". AnimeFlow's
new GET /library lists every Jellyfin series with AniList ids per TVDB
season; matchSchedule uses it for untracked shows (status inLibrary,
Put it up, no Request) and to fill jellyfinSeriesId. A failing or
missing /library never fails the schedule. Episodes may carry
anilist_episode (split cours, absolute numbering), matched first.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
lib/src/schedule/ for the 1.0 Schedule tab (UI and docs come with the
schedule round):
- AniListClient: airingSchedules in a window, 50 per page, adult/music
dropped; memory 10 min + disk 1 h cache, one Retry-After wait on 429,
stale cache on failure; real User-Agent (AniList 403s some defaults).
- AnimeFlowClient: the full app API (me, schedule, series, follow,
search, requests incl. approve/reject, users/scopes) with the user's
Jellyfin token, only for a Jellyfin on AnimeFlow's parent domain;
ETag/304, typed error codes, backoff on nginx's HTML 429, /me cached
at most 60 s so scope changes show.
- matchSchedule + ScheduleRepository: AniList airings with AnimeFlow
status by (episode anilist_id, episode), then absolute number, then
air day; degrades to AniList-only when AnimeFlow fails.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>