mirror of
https://github.com/kikootwo/ReadMeABook.git
synced 2026-06-03 04:40:09 +00:00
Fix critical bug: searches now respect enabled indexers
**Problem:** Prowlarr searches were querying ALL indexers instead of only the ones enabled in user settings, causing torrents to be selected from disabled/untrusted indexers. **Root Cause:** The prowlarr.search() method didn't filter by indexer IDs, and callers weren't passing enabled indexer IDs to the search. **Changes:** 1. Added indexerIds parameter to SearchFilters interface 2. Updated prowlarr.service.ts search() to filter by indexerIds 3. Updated search-indexers.processor.ts to fetch and pass enabled indexer IDs 4. Updated interactive-search route to fetch and pass enabled indexer IDs 5. Added validation: search fails if no indexers are configured/enabled 6. Updated documentation to reflect indexer filtering behavior **Impact:** - Manual search: Only searches enabled indexers - Interactive search: Only searches enabled indexers - RSS monitoring: Already correctly filtered (no changes needed) **Testing:** TypeScript type checking passed with no errors
This commit is contained in:
@@ -11,6 +11,7 @@ export interface SearchFilters {
|
||||
category?: number;
|
||||
minSeeders?: number;
|
||||
maxResults?: number;
|
||||
indexerIds?: number[];
|
||||
}
|
||||
|
||||
export interface Indexer {
|
||||
@@ -72,7 +73,8 @@ export class ProwlarrService {
|
||||
}
|
||||
|
||||
/**
|
||||
* Search for audiobooks across all configured indexers
|
||||
* Search for audiobooks across configured indexers
|
||||
* If indexerIds is provided, only searches those indexers
|
||||
*/
|
||||
async search(
|
||||
query: string,
|
||||
@@ -86,6 +88,11 @@ export class ProwlarrService {
|
||||
extended: 1, // Enable searching in tags, labels, and metadata
|
||||
};
|
||||
|
||||
// Filter by specific indexers if provided
|
||||
if (filters?.indexerIds && filters.indexerIds.length > 0) {
|
||||
params.indexerIds = filters.indexerIds.join(',');
|
||||
}
|
||||
|
||||
const response = await this.client.get('/search', { params });
|
||||
|
||||
// Transform Prowlarr results to our format
|
||||
|
||||
@@ -31,6 +31,24 @@ export async function processSearchIndexers(payload: SearchIndexersPayload): Pro
|
||||
},
|
||||
});
|
||||
|
||||
// Get enabled indexers from configuration
|
||||
const { getConfigService } = await import('../services/config.service');
|
||||
const configService = getConfigService();
|
||||
const indexersConfigStr = await configService.get('prowlarr_indexers');
|
||||
|
||||
if (!indexersConfigStr) {
|
||||
throw new Error('No indexers configured. Please configure indexers in settings.');
|
||||
}
|
||||
|
||||
const indexersConfig = JSON.parse(indexersConfigStr);
|
||||
const enabledIndexerIds = indexersConfig.map((indexer: any) => indexer.id);
|
||||
|
||||
if (enabledIndexerIds.length === 0) {
|
||||
throw new Error('No indexers enabled. Please enable at least one indexer in settings.');
|
||||
}
|
||||
|
||||
await logger?.info(`Searching ${enabledIndexerIds.length} enabled indexers`);
|
||||
|
||||
// Get Prowlarr service
|
||||
const prowlarr = await getProwlarrService();
|
||||
|
||||
@@ -39,11 +57,12 @@ export async function processSearchIndexers(payload: SearchIndexersPayload): Pro
|
||||
|
||||
await logger?.info(`Searching for: "${searchQuery}"`);
|
||||
|
||||
// Search indexers
|
||||
// Search indexers - ONLY enabled ones
|
||||
const searchResults = await prowlarr.search(searchQuery, {
|
||||
category: 3030, // Audiobooks
|
||||
minSeeders: 1, // Only torrents with at least 1 seeder
|
||||
maxResults: 50, // Limit results
|
||||
indexerIds: enabledIndexerIds, // Filter by enabled indexers
|
||||
});
|
||||
|
||||
await logger?.info(`Found ${searchResults.length} results`);
|
||||
|
||||
Reference in New Issue
Block a user