feat: add Readarr integration for managed downloads #191
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Adds optional Readarr integration so ABR can hand off book requests to Readarr (or compatible forks like Bookshelf) for the full download-to-library pipeline. Closes #116
What this does
When Readarr is configured in Settings, new book requests are immediately sent to Readarr as a background task. Readarr handles searching, grabbing, downloading, importing, renaming, and organizing files. If Readarr is not configured, the existing Prowlarr auto-download flow is unchanged.
query_sourcesanddownload_bookif the Readarr path fails.extra="allow"for Readarr API responses, following the existing Prowlarr typing patterns (TypeAdapter, strict basedpyright).What changed
app/internal/readarr/— new package:client.py,config.py,types.pyapp/routers/api/settings/readarr.py— API endpoints for Readarr settingsapp/routers/pages/settings/readarr.py— HTMX page routestemplates/pages/Settings/Readarr.jinja— settings UItemplates/layouts/SettingsLayout.jinja— added Readarr tabapp/routers/api/requests.py— immediate Readarr handoff increate_requestapp/internal/query.py— Readarr-first path inquery_sourcesfor manual auto-download, increased client timeout to 300sREADME.md— documentation for setup and behaviorChecks
basedpyright: 0 errors, 0 warnings, 0 notesruff format --check app: all files formatted