diff --git a/packages/core/src/builtins/base/nab/addon.ts b/packages/core/src/builtins/base/nab/addon.ts index a965d430..823224a8 100644 --- a/packages/core/src/builtins/base/nab/addon.ts +++ b/packages/core/src/builtins/base/nab/addon.ts @@ -18,6 +18,10 @@ export const NabAddonConfigSchema = BaseDebridConfigSchema.extend({ }); export type NabAddonConfig = z.infer; +interface SearchResultMetadata { + searchType: 'id' | 'query'; +} + export abstract class BaseNabAddon< C extends NabAddonConfig, A extends BaseNabApi<'torznab' | 'newznab'>, @@ -27,11 +31,15 @@ export abstract class BaseNabAddon< protected async performSearch( parsedId: ParsedId, metadata: SearchMetadata - ): Promise[]> { + ): Promise<{ + results: SearchResultItem[]; + meta: SearchResultMetadata; + }> { const start = Date.now(); const queryParams: Record = {}; const queryLimit = createQueryLimit(); let capabilities: Capabilities; + let searchType: SearchResultMetadata['searchType'] = 'id'; try { capabilities = await this.api.getCapabilities(); } catch (error) { @@ -118,6 +126,7 @@ export abstract class BaseNabAddon< addSeasonEpisode: !queryParams.season && !queryParams.ep, useAllTitles: useAllTitles(this.userData.url), }); + searchType = 'query'; } let results: SearchResultItem[] = []; if (queries.length > 0) { @@ -139,7 +148,12 @@ export abstract class BaseNabAddon< results: results.length, } ); - return results; + return { + results: results, + meta: { + searchType, + }, + }; } private getSearchFunction( diff --git a/packages/core/src/builtins/newznab/addon.ts b/packages/core/src/builtins/newznab/addon.ts index ebae8aff..94d33696 100644 --- a/packages/core/src/builtins/newznab/addon.ts +++ b/packages/core/src/builtins/newznab/addon.ts @@ -51,7 +51,7 @@ export class NewznabAddon extends BaseNabAddon { parsedId: ParsedId, metadata: SearchMetadata ): Promise { - const results = await this.performSearch(parsedId, metadata); + const { results, meta } = await this.performSearch(parsedId, metadata); const seenNzbs = new Set(); const nzbs: NZB[] = []; @@ -70,6 +70,7 @@ export class NewznabAddon extends BaseNabAddon { ); nzbs.push({ + confirmed: meta.searchType === 'id', hash: md5, nzb: nzbUrl, age: `${age}d`, diff --git a/packages/core/src/builtins/torbox-search/source-handlers.ts b/packages/core/src/builtins/torbox-search/source-handlers.ts index 76f9611a..0384f49f 100644 --- a/packages/core/src/builtins/torbox-search/source-handlers.ts +++ b/packages/core/src/builtins/torbox-search/source-handlers.ts @@ -330,6 +330,7 @@ export class TorrentSourceHandler extends SourceHandler { const { results, errors } = await processTorrents( fetchResult.torrents.map((torrent) => ({ ...torrent, + confirmed: true, type: 'torrent', })), this.services, @@ -557,6 +558,7 @@ export class UsenetSourceHandler extends SourceHandler { .filter((torrent) => torrent.nzb) .map((torrent) => ({ ...torrent, + confirmed: true, type: 'usenet' as const, nzb: torrent.nzb!, })); diff --git a/packages/core/src/builtins/torznab/addon.ts b/packages/core/src/builtins/torznab/addon.ts index fcc5d343..b656673b 100644 --- a/packages/core/src/builtins/torznab/addon.ts +++ b/packages/core/src/builtins/torznab/addon.ts @@ -44,7 +44,7 @@ export class TorznabAddon extends BaseNabAddon { parsedId: ParsedId, metadata: SearchMetadata ): Promise { - const results = await this.performSearch(parsedId, metadata); + const { results, meta } = await this.performSearch(parsedId, metadata); const seenTorrents = new Set(); const torrents: UnprocessedTorrent[] = []; @@ -61,6 +61,7 @@ export class TorznabAddon extends BaseNabAddon { seenTorrents.add(infoHash ?? downloadUrl!); torrents.push({ + confirmed: meta.searchType === 'id', hash: infoHash, downloadUrl, sources: result.torznab?.magneturl?.toString() diff --git a/packages/core/src/builtins/utils/debrid.ts b/packages/core/src/builtins/utils/debrid.ts index 8eb3aed9..c5b08e3a 100644 --- a/packages/core/src/builtins/utils/debrid.ts +++ b/packages/core/src/builtins/utils/debrid.ts @@ -158,7 +158,7 @@ async function processTorrentsForDebridService( const parsedTorrent = parsedFiles.get(torrent.title ?? ''); if (metadata && parsedTorrent) { - if (isTitleWrong(parsedTorrent, metadata)) { + if (torrent.confirmed !== true && isTitleWrong(parsedTorrent, metadata)) { continue; } if (isSeasonWrong(parsedTorrent, metadata)) {