fix(prowlarr): add debug logs and fetch after db init

This commit is contained in:
Viren070
2025-10-06 14:51:56 +01:00
parent cc37356683
commit ef20218cd5
3 changed files with 70 additions and 45 deletions
+55 -8
View File
@@ -39,6 +39,8 @@ export class ProwlarrAddon extends BaseDebridAddon<ProwlarrAddonConfig> {
readonly logger = logger;
readonly api: ProwlarrApi;
public static predefinedIndexers: ProwlarrApiIndexer[] | undefined;
private readonly indexers: string[] = [];
private readonly tags: string[] = [];
constructor(config: ProwlarrAddonConfig, clientIp?: string) {
@@ -52,17 +54,62 @@ export class ProwlarrAddon extends BaseDebridAddon<ProwlarrAddonConfig> {
});
}
static async getIndexers(
url: string,
apiKey: string
): Promise<ProwlarrApiIndexer[]> {
public static async fetchPredefinedIndexers(): Promise<void> {
if (this.predefinedIndexers) return;
if (!Env.BUILTIN_PROWLARR_URL || !Env.BUILTIN_PROWLARR_API_KEY) return;
const api = new ProwlarrApi({
baseUrl: url,
apiKey: apiKey,
timeout: Env.BUILTIN_PROWLARR_SEARCH_TIMEOUT,
baseUrl: Env.BUILTIN_PROWLARR_URL,
apiKey: Env.BUILTIN_PROWLARR_API_KEY,
timeout: 5000,
});
const { data } = await api.indexers();
return data;
logger.debug(`Fetched ${data.length} predefined indexers`);
let filterReasons: Map<string, number> = new Map();
this.predefinedIndexers = data.filter((indexer) => {
if (!indexer.enable) {
filterReasons.set(
'not enabled',
(filterReasons.get('not enabled') ?? 0) + 1
);
return false;
}
if (indexer.protocol !== 'torrent') {
filterReasons.set(
'not torrent protocol',
(filterReasons.get('not torrent protocol') ?? 0) + 1
);
return false;
}
if (Env.BUILTIN_PROWLARR_INDEXERS?.length) {
if (
![
indexer.name.toLowerCase(),
indexer.sortName.toLowerCase(),
indexer.definitionName.toLowerCase(),
].some((x) =>
Env.BUILTIN_PROWLARR_INDEXERS?.map((x) => x.toLowerCase()).includes(
x
)
)
) {
filterReasons.set(
'not in predefined indexers',
(filterReasons.get('not in predefined indexers') ?? 0) + 1
);
return false;
}
}
return true;
});
logger.debug(`Set ${this.predefinedIndexers?.length} predefined indexers`);
if (filterReasons.size > 0) {
logger.debug(
`Filter reasons: ${Array.from(filterReasons.entries())
.map(([key, value]) => `${key}: ${value}`)
.join(', ')}`
);
}
}
protected async _searchTorrents(
+5 -37
View File
@@ -10,40 +10,6 @@ import {
import { StremThruPreset } from './stremthru.js';
import { BuiltinAddonPreset } from './builtin.js';
import { ProwlarrAddon } from '../builtins/index.js';
import { ProwlarrApiIndexer } from '../builtins/prowlarr/api.js';
let indexers: ProwlarrApiIndexer[] | undefined;
const logger = createLogger('prowlarr');
if (Env.BUILTIN_PROWLARR_URL && Env.BUILTIN_PROWLARR_API_KEY) {
(async () => {
while (typeof DB !== 'undefined' && !DB.getInstance().isInitialised()) {
await new Promise((resolve) => setTimeout(resolve, 100));
}
try {
indexers = await ProwlarrAddon.getIndexers(
Env.BUILTIN_PROWLARR_URL!,
Env.BUILTIN_PROWLARR_API_KEY!
);
indexers = indexers.filter(
(indexer) =>
indexer.enable &&
indexer.protocol === 'torrent' &&
(Env.BUILTIN_PROWLARR_INDEXERS?.length
? [indexer.name, indexer.sortName, indexer.definitionName]
.map((x) => x.toLowerCase())
.some((x) =>
Env.BUILTIN_PROWLARR_INDEXERS!.map((x) =>
x.toLowerCase()
).includes(x)
)
: true)
);
} catch (e) {
logger.error(`Failed to get indexers from Prowlarr: ${e}`);
}
})();
}
export class ProwlarrPreset extends BuiltinAddonPreset {
static override get METADATA() {
@@ -95,7 +61,7 @@ export class ProwlarrPreset extends BuiltinAddonPreset {
type: 'password',
required: !Env.BUILTIN_PROWLARR_URL || !Env.BUILTIN_PROWLARR_API_KEY,
},
...(indexers
...(ProwlarrAddon.predefinedIndexers
? [
{
id: 'indexers',
@@ -103,11 +69,13 @@ export class ProwlarrPreset extends BuiltinAddonPreset {
description:
'If using the preconfigured instance, select the indexers to use here.',
type: 'multi-select',
options: indexers.map((indexer) => ({
options: ProwlarrAddon.predefinedIndexers.map((indexer) => ({
label: indexer.name,
value: indexer.name,
})),
default: indexers.map((indexer) => indexer.name),
default: ProwlarrAddon.predefinedIndexers.map(
(indexer) => indexer.name
),
} as const,
]
: [
+10
View File
@@ -11,6 +11,7 @@ import {
FeatureControl,
PTT,
AnimeDatabase,
ProwlarrAddon,
} from '@aiostreams/core';
const logger = createLogger('server');
@@ -57,6 +58,14 @@ async function initialiseAnimeDatabase() {
}
}
async function initialiseProwlarr() {
try {
await ProwlarrAddon.fetchPredefinedIndexers();
} catch (error) {
logger.error('Failed to initialise Prowlarr:', error);
}
}
async function start() {
try {
logStartupInfo();
@@ -65,6 +74,7 @@ async function start() {
await initialisePTT();
initialiseAnimeDatabase();
FeatureControl.initialise();
await initialiseProwlarr();
if (Env.PRUNE_MAX_DAYS >= 0) {
startAutoPrune();
}