cross-seed 6.8.9 → 6.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/action.js +65 -38
  2. package/dist/action.js.map +1 -1
  3. package/dist/clients/Deluge.js +87 -7
  4. package/dist/clients/Deluge.js.map +1 -1
  5. package/dist/clients/QBittorrent.js +124 -10
  6. package/dist/clients/QBittorrent.js.map +1 -1
  7. package/dist/clients/RTorrent.js +200 -74
  8. package/dist/clients/RTorrent.js.map +1 -1
  9. package/dist/clients/TorrentClient.js +6 -2
  10. package/dist/clients/TorrentClient.js.map +1 -1
  11. package/dist/clients/Transmission.js +93 -7
  12. package/dist/clients/Transmission.js.map +1 -1
  13. package/dist/cmd.js +24 -19
  14. package/dist/cmd.js.map +1 -1
  15. package/dist/config.template.cjs +14 -8
  16. package/dist/config.template.cjs.map +1 -1
  17. package/dist/configSchema.js +50 -31
  18. package/dist/configSchema.js.map +1 -1
  19. package/dist/configuration.js.map +1 -1
  20. package/dist/constants.js +1 -0
  21. package/dist/constants.js.map +1 -1
  22. package/dist/dataFiles.js +50 -48
  23. package/dist/dataFiles.js.map +1 -1
  24. package/dist/db.js +12 -0
  25. package/dist/db.js.map +1 -1
  26. package/dist/decide.js +9 -9
  27. package/dist/decide.js.map +1 -1
  28. package/dist/inject.js +8 -5
  29. package/dist/inject.js.map +1 -1
  30. package/dist/parseTorrent.js +18 -16
  31. package/dist/parseTorrent.js.map +1 -1
  32. package/dist/pipeline.js +45 -41
  33. package/dist/pipeline.js.map +1 -1
  34. package/dist/preFilter.js +37 -9
  35. package/dist/preFilter.js.map +1 -1
  36. package/dist/pushNotifier.js +15 -21
  37. package/dist/pushNotifier.js.map +1 -1
  38. package/dist/runtimeConfig.js +5 -2
  39. package/dist/runtimeConfig.js.map +1 -1
  40. package/dist/searchee.js +54 -9
  41. package/dist/searchee.js.map +1 -1
  42. package/dist/server.js +67 -47
  43. package/dist/server.js.map +1 -1
  44. package/dist/startup.js +34 -13
  45. package/dist/startup.js.map +1 -1
  46. package/dist/torrent.js +144 -119
  47. package/dist/torrent.js.map +1 -1
  48. package/dist/torznab.js +6 -6
  49. package/dist/torznab.js.map +1 -1
  50. package/dist/utils.js +55 -0
  51. package/dist/utils.js.map +1 -1
  52. package/package.json +1 -1
package/dist/torrent.js CHANGED
@@ -5,15 +5,15 @@ import { readdir, readFile, writeFile } from "fs/promises";
5
5
  import Fuse from "fuse.js";
6
6
  import { extname, join, resolve } from "path";
7
7
  import { inspect } from "util";
8
- import { getClient } from "./clients/TorrentClient.js";
8
+ import { getClient, validateClientSavePaths, } from "./clients/TorrentClient.js";
9
9
  import { LEVENSHTEIN_DIVISOR, MediaType, SAVED_TORRENTS_INFO_REGEX, USER_AGENT, } from "./constants.js";
10
10
  import { db, memDB } from "./db.js";
11
11
  import { Label, logger, logOnce } from "./logger.js";
12
- import { updateMetafileMetadata, Metafile } from "./parseTorrent.js";
12
+ import { Metafile, updateMetafileMetadata } from "./parseTorrent.js";
13
13
  import { isOk, resultOf, resultOfErr } from "./Result.js";
14
14
  import { getRuntimeConfig } from "./runtimeConfig.js";
15
- import { createSearcheeFromPath, createSearcheeFromTorrentFile, getAbsoluteFilePath, getAnimeKeys, getEpisodeKey, getLargestFile, getMovieKey, getSeasonKey, } from "./searchee.js";
16
- import { createKeyTitle, getLogString, stripExtension } from "./utils.js";
15
+ import { createSearcheeFromDB, createSearcheeFromPath, createSearcheeFromTorrentFile, getAbsoluteFilePath, getAnimeKeys, getEpisodeKey, getLargestFile, getMovieKey, getSeasonKey, } from "./searchee.js";
16
+ import { getLogString, inBatches, isTruthy, Mutex, stripExtension, withMutex, } from "./utils.js";
17
17
  import { getDataByFuzzyName, indexDataDirs, shouldIgnorePathHeuristically, } from "./dataFiles.js";
18
18
  export var SnatchError;
19
19
  (function (SnatchError) {
@@ -176,55 +176,98 @@ export async function createEnsemblePieces(title, files) {
176
176
  const largestFile = getLargestFile(files);
177
177
  return { key, element, largestFile };
178
178
  }
179
- async function cacheEnsembleTorrentEntry(meta, torrentSavePaths) {
180
- const ensemblePieces = await createEnsemblePieces(meta.title, meta.files);
179
+ async function cacheEnsembleTorrentEntry(searchee, torrentSavePaths) {
180
+ const ensemblePieces = await createEnsemblePieces(searchee.title, searchee.files);
181
181
  if (!ensemblePieces)
182
182
  return null;
183
183
  const { key, element, largestFile } = ensemblePieces;
184
184
  let savePath;
185
- if (!torrentSavePaths) {
186
- const downloadDirResult = await getClient().getDownloadDir(meta, {
185
+ if (searchee.savePath) {
186
+ savePath = searchee.savePath;
187
+ }
188
+ else if (torrentSavePaths) {
189
+ savePath = torrentSavePaths.get(searchee.infoHash);
190
+ }
191
+ else {
192
+ const downloadDirResult = await getClient().getDownloadDir(searchee, {
187
193
  onlyCompleted: false,
188
194
  });
189
195
  if (downloadDirResult.isErr()) {
190
- logger.error(`Failed to get download dir for ${getLogString(meta)}`);
196
+ logger.error(`Failed to get download dir for ${getLogString(searchee)}`);
191
197
  return null;
192
198
  }
193
199
  savePath = downloadDirResult.unwrap();
194
200
  }
195
- else {
196
- savePath = torrentSavePaths.get(meta.infoHash);
197
- }
198
201
  if (!savePath) {
199
- logger.error(`Failed to get save path for ${getLogString(meta)}`);
202
+ logger.error(`Failed to get save path for ${getLogString(searchee)}`);
200
203
  return null;
201
204
  }
202
205
  // Don't want to statSync(sourceRoot).isFile() now as it might be downloading.
203
206
  // The path will get checked when rss/announce has a potential match.
204
- const sourceRoot = join(savePath, meta.files.length === 1 ? meta.files[0].path : meta.name);
207
+ const sourceRoot = join(savePath, searchee.files.length === 1 ? searchee.files[0].path : searchee.name);
205
208
  return {
206
- path: getAbsoluteFilePath(sourceRoot, largestFile.path, meta.files.length === 1),
209
+ path: getAbsoluteFilePath(sourceRoot, largestFile.path, searchee.files.length === 1),
210
+ info_hash: searchee.infoHash,
207
211
  ensemble: key,
208
212
  element,
209
213
  };
210
214
  }
211
- async function indexNewTorrents() {
212
- const { seasonFromEpisodes, torrentDir } = getRuntimeConfig();
213
- if (!torrentDir)
215
+ async function indexTorrents(options) {
216
+ const { seasonFromEpisodes, torrentDir, useClientTorrents } = getRuntimeConfig();
217
+ if (!useClientTorrents && !torrentDir)
218
+ return;
219
+ let searchees;
220
+ let infoHashPathMap;
221
+ if (options.startup) {
222
+ if (torrentDir) {
223
+ logger.info("Indexing torrentDir for reverse lookup...");
224
+ searchees = await loadTorrentDirLight(torrentDir);
225
+ infoHashPathMap = await getClient().getAllDownloadDirs({
226
+ metas: searchees,
227
+ onlyCompleted: false,
228
+ v1HashOnly: true,
229
+ });
230
+ }
231
+ else {
232
+ logger.info("Indexing client torrents for reverse lookup...");
233
+ searchees = (await getClient().getClientSearchees()).searchees;
234
+ infoHashPathMap = searchees.reduce((map, searchee) => {
235
+ map.set(searchee.infoHash, searchee.savePath);
236
+ return map;
237
+ }, new Map());
238
+ }
239
+ await validateClientSavePaths(searchees, new Map(infoHashPathMap));
240
+ }
241
+ else {
242
+ if (torrentDir) {
243
+ searchees = await indexTorrentDir(torrentDir);
244
+ }
245
+ else {
246
+ searchees = (await getClient().getClientSearchees({
247
+ newSearcheesOnly: true,
248
+ })).newSearchees;
249
+ }
250
+ }
251
+ if (!seasonFromEpisodes)
214
252
  return;
215
- const dirContents = new Set(await findAllTorrentFilesInDir(torrentDir));
253
+ const ensembleRows = (await Promise.all(searchees.map((searchee) => cacheEnsembleTorrentEntry(searchee, infoHashPathMap)))).filter(isTruthy);
254
+ await inBatches(ensembleRows, async (batch) => {
255
+ await memDB("ensemble").insert(batch).onConflict("path").merge();
256
+ });
257
+ }
258
+ async function indexTorrentDir(dir) {
259
+ const dirContents = new Set(await findAllTorrentFilesInDir(dir));
216
260
  // Index new torrents in the torrentDir
217
261
  let firstNewTorrent = true;
262
+ const newSearchees = [];
218
263
  for (const filepath of dirContents) {
219
264
  const doesAlreadyExist = await db("torrent")
220
265
  .select("id")
221
266
  .where({ file_path: filepath })
222
267
  .first();
223
268
  if (!doesAlreadyExist) {
224
- if (firstNewTorrent) {
225
- logger.verbose("Indexing torrentDir due to recent changes...");
269
+ if (firstNewTorrent)
226
270
  firstNewTorrent = false;
227
- }
228
271
  let meta;
229
272
  try {
230
273
  meta = await parseTorrentFromFilename(filepath);
@@ -244,73 +287,49 @@ async function indexNewTorrents() {
244
287
  })
245
288
  .onConflict("file_path")
246
289
  .ignore();
247
- if (seasonFromEpisodes) {
248
- const ensembleEntry = await cacheEnsembleTorrentEntry(meta);
249
- if (ensembleEntry) {
250
- await memDB("ensemble")
251
- .insert(ensembleEntry)
252
- .onConflict("path")
253
- .ignore();
254
- }
255
- }
290
+ const res = await createSearcheeFromTorrentFile(filepath, []);
291
+ if (res.isOk())
292
+ newSearchees.push(res.unwrap());
256
293
  }
257
294
  }
258
295
  const dbFiles = await db("torrent").select({ filePath: "file_path" });
259
296
  const dbFilePaths = dbFiles.map((row) => row.filePath);
260
297
  const filesToDelete = dbFilePaths.filter((filePath) => !dirContents.has(filePath));
261
- const batchSize = 100;
262
- for (let i = 0; i < filesToDelete.length; i += batchSize) {
263
- const batch = filesToDelete.slice(i, i + batchSize);
264
- if (!batch.length)
265
- break;
298
+ await inBatches(filesToDelete, async (batch) => {
266
299
  await db("torrent").whereIn("file_path", batch).del();
267
- }
300
+ });
301
+ return newSearchees;
268
302
  }
269
- export async function indexEnsemble() {
270
- const { seasonFromEpisodes, torrentDir } = getRuntimeConfig();
271
- if (!seasonFromEpisodes || !torrentDir)
272
- return;
273
- logger.info("Indexing ensemble for reverse lookup...");
274
- const dirContents = await findAllTorrentFilesInDir(torrentDir);
275
- const metas = [];
276
- for (const filepath of dirContents) {
277
- let meta;
278
- try {
279
- meta = await parseTorrentFromFilename(filepath);
280
- }
281
- catch (e) {
282
- logOnce(`Failed to parse ${filepath}`, () => {
283
- logger.error(`Failed to parse ${filepath}`);
303
+ export async function indexTorrentsAndDataDirs(options = { startup: false }) {
304
+ return withMutex(Mutex.INDEX_TORRENTS_AND_DATA_DIRS, async () => {
305
+ const maxRetries = 3;
306
+ for (let attempt = 1; attempt <= maxRetries; attempt++) {
307
+ try {
308
+ await Promise.all([
309
+ indexTorrents(options),
310
+ indexDataDirs(options),
311
+ ]);
312
+ break;
313
+ }
314
+ catch (e) {
315
+ const msg = `Indexing failed (${maxRetries - attempt}): ${e.message}`;
316
+ if (attempt < maxRetries) {
317
+ logger.verbose(msg);
318
+ }
319
+ else {
320
+ logger.error(msg);
321
+ if (options.startup)
322
+ throw e;
323
+ }
284
324
  logger.debug(e);
285
- });
286
- continue;
287
- }
288
- metas.push(meta);
289
- }
290
- const torrentSavePaths = await getClient().getAllDownloadDirs({
291
- metas,
292
- onlyCompleted: false,
293
- });
294
- const ensembleRows = (await Promise.allSettled(metas.map((meta) => cacheEnsembleTorrentEntry(meta, torrentSavePaths)))).reduce((acc, result) => {
295
- if (result.status === "fulfilled" && result.value) {
296
- acc.push(result.value);
325
+ }
297
326
  }
298
- return acc;
299
- }, []);
300
- const batchSize = 100;
301
- for (let i = 0; i < ensembleRows.length; i += batchSize) {
302
- const batch = ensembleRows.slice(i, i + batchSize);
303
- if (!batch.length)
304
- break;
305
- await memDB("ensemble").insert(batch).onConflict("path").ignore();
306
- }
307
- }
308
- export async function indexTorrentsAndDataDirs() {
309
- await indexNewTorrents();
310
- await indexDataDirs();
327
+ }, { useQueue: false });
311
328
  }
312
329
  export async function getInfoHashesToExclude() {
313
- return new Set((await db("torrent").select({ infoHash: "info_hash" })).map((t) => t.infoHash));
330
+ const { useClientTorrents } = getRuntimeConfig();
331
+ const database = useClientTorrents ? memDB : db;
332
+ return new Set((await database("torrent").select({ infoHash: "info_hash" })).map((e) => e.infoHash));
314
333
  }
315
334
  export async function loadTorrentDirLight(torrentDir) {
316
335
  const torrentFilePaths = await findAllTorrentFilesInDir(torrentDir);
@@ -355,18 +374,20 @@ function getKeysFromName(name) {
355
374
  return { keyTitles: [], useFallback: true };
356
375
  }
357
376
  export async function getSimilarByName(name) {
358
- const { torrentDir, dataDirs } = getRuntimeConfig();
377
+ const { torrentDir, useClientTorrents } = getRuntimeConfig();
359
378
  const { keyTitles, element, useFallback } = getKeysFromName(name);
360
- const metas = useFallback ? await getTorrentByFuzzyName(name) : [];
379
+ const clientSearchees = useFallback
380
+ ? await getTorrentByFuzzyName(name)
381
+ : [];
361
382
  const dataSearchees = useFallback ? await getDataByFuzzyName(name) : [];
362
383
  if (!keyTitles.length) {
363
- return { keys: [], metas, dataSearchees };
384
+ return { keys: [], clientSearchees, dataSearchees };
364
385
  }
365
386
  const candidateMaxDistance = Math.floor(Math.max(...keyTitles.map((keyTitle) => keyTitle.length)) /
366
387
  LEVENSHTEIN_DIVISOR);
367
388
  const filterEntries = async (dbEntries) => {
368
389
  return dbEntries.filter((dbEntry) => {
369
- const entry = getKeysFromName(dbEntry.name ?? dbEntry.title);
390
+ const entry = getKeysFromName(dbEntry.title ?? dbEntry.name);
370
391
  if (entry.element !== element)
371
392
  return false;
372
393
  if (!entry.keyTitles.length)
@@ -377,20 +398,23 @@ export async function getSimilarByName(name) {
377
398
  });
378
399
  });
379
400
  };
380
- const filteredTorrentEntries = (await filterEntries(torrentDir ? await db("torrent").select("name", "file_path") : []));
381
- if (filteredTorrentEntries.length) {
382
- const client = getClient();
383
- const torrentInfos = client && client.type !== Label.QBITTORRENT
384
- ? await client.getAllTorrents()
385
- : [];
386
- metas.push(...(await Promise.allSettled(filteredTorrentEntries.map(async (dbTorrent) => {
387
- return parseTorrentWithMetadata(dbTorrent.file_path, torrentInfos);
388
- })))
389
- .filter((p) => p.status === "fulfilled")
390
- .map((p) => p.value));
401
+ if (useClientTorrents) {
402
+ clientSearchees.push(...(await filterEntries(await memDB("torrent"))).map(createSearcheeFromDB));
403
+ }
404
+ else if (torrentDir) {
405
+ const filteredTorrentEntries = (await filterEntries(await db("torrent").select("name", "file_path")));
406
+ if (filteredTorrentEntries.length) {
407
+ const client = getClient();
408
+ const torrentInfos = client && client.type !== Label.QBITTORRENT
409
+ ? await client.getAllTorrents()
410
+ : [];
411
+ clientSearchees.push(...(await Promise.all(filteredTorrentEntries.map(async (dbTorrent) => {
412
+ return (await createSearcheeFromTorrentFile(dbTorrent.file_path, torrentInfos)).orElse(null);
413
+ }))).filter(isTruthy));
414
+ }
391
415
  }
392
416
  const entriesToDelete = [];
393
- const filteredDataEntries = (await filterEntries(dataDirs ? await memDB("data") : [])).filter(({ path }) => {
417
+ const filteredDataEntries = (await filterEntries(await memDB("data"))).filter(({ path }) => {
394
418
  if (!existsSync(path) ||
395
419
  shouldIgnorePathHeuristically(path, statSync(path).isDirectory())) {
396
420
  entriesToDelete.push(path);
@@ -398,9 +422,10 @@ export async function getSimilarByName(name) {
398
422
  }
399
423
  return true;
400
424
  });
401
- if (entriesToDelete.length > 0) {
402
- await memDB("data").whereIn("path", entriesToDelete).del();
403
- }
425
+ await inBatches(entriesToDelete, async (batch) => {
426
+ await memDB("data").whereIn("path", batch).del();
427
+ await memDB("ensemble").whereIn("path", batch).del();
428
+ });
404
429
  if (filteredDataEntries.length) {
405
430
  dataSearchees.push(...(await Promise.all(filteredDataEntries.map(async (dbData) => {
406
431
  return createSearcheeFromPath(dbData.path);
@@ -411,49 +436,49 @@ export async function getSimilarByName(name) {
411
436
  const keys = element
412
437
  ? keyTitles.map((keyTitle) => `${keyTitle}.${element}`)
413
438
  : keyTitles;
414
- return { keys, metas, dataSearchees };
439
+ return { keys, clientSearchees, dataSearchees };
415
440
  }
416
441
  async function getTorrentByFuzzyName(name) {
417
- const allNames = await db("torrent").select("name", "file_path");
418
- const fullMatch = createKeyTitle(name);
419
- // Attempt to filter torrents in DB to match incoming torrent before fuzzy check
420
- let filteredNames = [];
421
- if (fullMatch) {
422
- filteredNames = allNames.filter((dbName) => {
423
- const dbMatch = createKeyTitle(dbName.name);
424
- return fullMatch === dbMatch;
425
- });
426
- }
427
- // If none match, proceed with fuzzy name check on all names.
428
- filteredNames = filteredNames.length > 0 ? filteredNames : allNames;
442
+ const { useClientTorrents } = getRuntimeConfig();
443
+ const database = useClientTorrents
444
+ ? await memDB("torrent")
445
+ : await db("torrent");
429
446
  // @ts-expect-error fuse types are confused
430
- const potentialMatches = new Fuse(filteredNames, {
431
- keys: ["name"],
447
+ const potentialMatches = new Fuse(database, {
448
+ keys: ["title", "name"],
432
449
  distance: 6,
433
450
  threshold: 0.25,
434
451
  }).search(name);
435
452
  if (potentialMatches.length === 0)
436
453
  return [];
454
+ if (useClientTorrents) {
455
+ return [createSearcheeFromDB(potentialMatches[0].item)];
456
+ }
437
457
  const client = getClient();
438
458
  const torrentInfos = client && client.type !== Label.QBITTORRENT
439
459
  ? await client.getAllTorrents()
440
460
  : [];
441
- return [
442
- await parseTorrentWithMetadata(potentialMatches[0].item.file_path, torrentInfos),
443
- ];
461
+ const res = await createSearcheeFromTorrentFile(potentialMatches[0].item.file_path, torrentInfos);
462
+ if (res.isOk())
463
+ return [res.unwrap()];
464
+ return [];
444
465
  }
445
466
  export async function getTorrentByCriteria(criteria) {
446
- const findResult = await db("torrent")
467
+ const { useClientTorrents } = getRuntimeConfig();
468
+ const database = useClientTorrents ? memDB : db;
469
+ const dbTorrent = await database("torrent")
447
470
  .where((b) => b.where({ info_hash: criteria.infoHash }))
448
471
  .first();
449
- if (findResult === undefined) {
450
- const message = `torrentDir does not have any torrent with criteria ${inspect(criteria)}`;
472
+ if (!dbTorrent) {
473
+ const message = `Torrent client does not have any torrent with criteria ${inspect(criteria)}`;
451
474
  throw new Error(message);
452
475
  }
476
+ if (useClientTorrents)
477
+ return createSearcheeFromDB(dbTorrent);
453
478
  const client = getClient();
454
479
  const torrentInfos = client && client.type !== Label.QBITTORRENT
455
480
  ? await client.getAllTorrents()
456
481
  : [];
457
- return parseTorrentWithMetadata(findResult.file_path, torrentInfos);
482
+ return (await createSearcheeFromTorrentFile(dbTorrent.file_path, torrentInfos)).unwrapOrThrow(new Error(`Failed to create searchee from ${dbTorrent.file_path}`));
458
483
  }
459
484
  //# sourceMappingURL=torrent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"torrent.js","sourceRoot":"","sources":["../src/torrent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"torrent.js","sourceRoot":"","sources":["../src/torrent.ts"],"names":[],"mappings":"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"}
package/dist/torznab.js CHANGED
@@ -295,7 +295,7 @@ export async function* queryRssFeeds(lastRun) {
295
295
  const indexers = await getEnabledIndexers();
296
296
  yield* combineAsyncIterables(indexers.map((indexer) => rssPager(indexer, timeSinceLastRun)));
297
297
  }
298
- export async function searchTorznab(searchee, indexerSearchCount, cachedSearch, progress) {
298
+ export async function searchTorznab(searchee, indexerSearchCount, cachedSearch, progress, options) {
299
299
  const { torznab } = getRuntimeConfig();
300
300
  if (torznab.length === 0) {
301
301
  logger.warn({
@@ -305,7 +305,7 @@ export async function searchTorznab(searchee, indexerSearchCount, cachedSearch,
305
305
  return [];
306
306
  }
307
307
  const mediaType = getMediaType(searchee);
308
- const { indexersToSearch, parsedMedia } = await getAndLogIndexers(searchee, indexerSearchCount, cachedSearch, mediaType, progress);
308
+ const { indexersToSearch, parsedMedia } = await getAndLogIndexers(searchee, indexerSearchCount, cachedSearch, mediaType, progress, options);
309
309
  const indexerCandidates = await makeRequests(indexersToSearch, async (indexer) => {
310
310
  const caps = {
311
311
  search: indexer.searchCap,
@@ -517,8 +517,8 @@ async function makeRequests(indexers, getQueriesForIndexer) {
517
517
  candidates: results,
518
518
  }));
519
519
  }
520
- async function getAndLogIndexers(searchee, indexerSearchCount, cachedSearch, mediaType, progress) {
521
- const { excludeRecentSearch, excludeOlder, seasonFromEpisodes, searchLimit, } = getRuntimeConfig();
520
+ async function getAndLogIndexers(searchee, indexerSearchCount, cachedSearch, mediaType, progress, options) {
521
+ const { excludeRecentSearch, excludeOlder, seasonFromEpisodes, searchLimit, } = getRuntimeConfig(options?.configOverride);
522
522
  const searcheeLog = getLogString(searchee, chalk.bold.white);
523
523
  const mediaTypeLog = chalk.white(mediaType.toUpperCase());
524
524
  const enabledIndexers = await getEnabledIndexers();
@@ -534,10 +534,10 @@ async function getAndLogIndexers(searchee, indexerSearchCount, cachedSearch, med
534
534
  firstSearched: "timestamp.first_searched",
535
535
  lastSearched: "timestamp.last_searched",
536
536
  });
537
- const skipBefore = searchee.label !== Label.WEBHOOK && excludeOlder
537
+ const skipBefore = excludeOlder
538
538
  ? nMsAgo(excludeOlder)
539
539
  : Number.NEGATIVE_INFINITY;
540
- const skipAfter = searchee.label !== Label.WEBHOOK && excludeRecentSearch
540
+ const skipAfter = excludeRecentSearch
541
541
  ? nMsAgo(excludeRecentSearch)
542
542
  : Number.POSITIVE_INFINITY;
543
543
  const isEnsemble = seasonFromEpisodes && !searchee.infoHash && !searchee.path;