mirror of
https://github.com/Viren070/AIOStreams.git
synced 2025-12-01 23:14:04 +01:00
fix(prowlarr): add debug logs and fetch after db init
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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,
|
||||
]
|
||||
: [
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user