feat: add Prowlarr integration for manual release search

Add Prowlarr indexer integration (step 1: config + manual search).
Allows searching for comics/ebooks releases on Prowlarr indexers
directly from the series detail page, with download links and
per-volume search for missing books.

- Backend: new prowlarr module with search and test endpoints
- Migration: add prowlarr settings (url, api_key, categories)
- Settings UI: Prowlarr config card with test connection button
- ProwlarrSearchModal: auto-search on open, missing volumes shortcuts
- Fix series.readCount i18n plural parameter on series pages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-19 21:43:34 +01:00
parent e6aa7ebed0
commit 57bc82703d
13 changed files with 755 additions and 2 deletions

View File

@@ -876,3 +876,37 @@ export async function getMetadataBatchResults(jobId: string, status?: string) {
const params = status ? `?status=${status}` : "";
return apiFetch<MetadataBatchResultDto[]>(`/metadata/batch/${jobId}/results${params}`);
}
// ---------------------------------------------------------------------------
// Prowlarr
// ---------------------------------------------------------------------------
export type ProwlarrCategory = {
id: number;
name: string | null;
};
export type ProwlarrRelease = {
guid: string;
title: string;
size: number;
downloadUrl: string | null;
indexer: string | null;
seeders: number | null;
leechers: number | null;
publishDate: string | null;
protocol: string | null;
infoUrl: string | null;
categories: ProwlarrCategory[] | null;
};
export type ProwlarrSearchResponse = {
results: ProwlarrRelease[];
query: string;
};
export type ProwlarrTestResponse = {
success: boolean;
message: string;
indexer_count: number | null;
};