cross-seed 6.0.0-23 → 6.0.0-24

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.
package/dist/decide.js CHANGED
@@ -1,21 +1,22 @@
1
1
  import { existsSync, statSync, utimesSync, writeFileSync } from "fs";
2
2
  import path from "path";
3
3
  import { appDir } from "./configuration.js";
4
- import { ARR_PROPER_REGEX, Decision, isAnyMatchedDecision, MatchMode, RELEASE_GROUP_REGEX, REPACK_PROPER_REGEX, RES_STRICT_REGEX, TORRENT_CACHE_FOLDER, } from "./constants.js";
4
+ import { Decision, isAnyMatchedDecision, isStaticDecision, MatchMode, RELEASE_GROUP_REGEX, REPACK_PROPER_REGEX, RES_STRICT_REGEX, parseSource, TORRENT_CACHE_FOLDER, ANIME_GROUP_REGEX, } from "./constants.js";
5
5
  import { db } from "./db.js";
6
6
  import { Label, logger } from "./logger.js";
7
+ import { Metafile } from "./parseTorrent.js";
7
8
  import { findBlockedStringInReleaseMaybe } from "./preFilter.js";
8
9
  import { getRuntimeConfig } from "./runtimeConfig.js";
9
10
  import { parseTorrentFromFilename, snatch, SnatchError } from "./torrent.js";
10
- import { extractInt, humanReadableSize, stripExtension, wait, } from "./utils.js";
11
+ import { extractInt, getFuzzySizeFactor, getMinSizeRatio, humanReadableSize, stripExtension, wait, } from "./utils.js";
11
12
  import ms from "ms";
12
- const createReasonLogger = (Title, tracker, name) => (decision, cached, searchee, candidate) => {
13
+ const createReasonLogger = (title, tracker, name) => (decision, cached, searchee, candidate) => {
13
14
  if (cached)
14
15
  return;
15
16
  function logReason(reason) {
16
17
  logger.verbose({
17
18
  label: Label.DECIDE,
18
- message: `${name} - no match for ${tracker} torrent ${Title} - ${reason}`,
19
+ message: `${name} - no match for ${tracker} torrent ${title} - ${reason}`,
19
20
  });
20
21
  }
21
22
  let reason;
@@ -65,6 +66,9 @@ const createReasonLogger = (Title, tracker, name) => (decision, cached, searchee
65
66
  reason = `one is a different subsequent release: ${searchee.name.match(REPACK_PROPER_REGEX)?.groups?.type ??
66
67
  "INITIAL"} -> ${candidate.name.match(REPACK_PROPER_REGEX)?.groups?.type ?? "INITIAL"}`;
67
68
  break;
69
+ case Decision.SOURCE_MISMATCH:
70
+ reason = `it has a different source: ${parseSource(searchee.name)} -> ${parseSource(candidate.name)}`;
71
+ break;
68
72
  case Decision.BLOCKED_RELEASE:
69
73
  reason = `it matches the blocklist: "${findBlockedStringInReleaseMaybe(searchee, getRuntimeConfig().blockList)}"`;
70
74
  break;
@@ -95,7 +99,6 @@ export function compareFileTreesIgnoringNames(candidate, searchee) {
95
99
  return true;
96
100
  }
97
101
  export function comparePartialSizeOnly(candidate, searchee) {
98
- const { fuzzySizeThreshold } = getRuntimeConfig();
99
102
  let matchedSizes = 0;
100
103
  for (const candidateFile of candidate.files) {
101
104
  const searcheeHasFileSize = searchee.files.some((searcheeFile) => searcheeFile.length === candidateFile.length);
@@ -103,10 +106,9 @@ export function comparePartialSizeOnly(candidate, searchee) {
103
106
  matchedSizes += candidateFile.length;
104
107
  }
105
108
  }
106
- return matchedSizes / candidate.length >= 1 - fuzzySizeThreshold;
109
+ return matchedSizes / candidate.length >= getMinSizeRatio();
107
110
  }
108
111
  export function compareFileTreesPartial(candidate, searchee) {
109
- const { fuzzySizeThreshold } = getRuntimeConfig();
110
112
  let matchedSizes = 0;
111
113
  for (const candidateFile of candidate.files) {
112
114
  let matchedSearcheeFiles = searchee.files.filter((searcheeFile) => searcheeFile.length === candidateFile.length);
@@ -119,16 +121,16 @@ export function compareFileTreesPartial(candidate, searchee) {
119
121
  }
120
122
  const totalPieces = Math.ceil(candidate.length / candidate.pieceLength);
121
123
  const availablePieces = Math.floor(matchedSizes / candidate.pieceLength);
122
- return availablePieces / totalPieces >= 1 - fuzzySizeThreshold;
124
+ return availablePieces / totalPieces >= getMinSizeRatio();
123
125
  }
124
126
  function fuzzySizeDoesMatch(resultSize, searchee) {
125
- const { fuzzySizeThreshold } = getRuntimeConfig();
127
+ const fuzzySizeFactor = getFuzzySizeFactor();
126
128
  const { length } = searchee;
127
- const lowerBound = length - fuzzySizeThreshold * length;
128
- const upperBound = length + fuzzySizeThreshold * length;
129
+ const lowerBound = length - fuzzySizeFactor * length;
130
+ const upperBound = length + fuzzySizeFactor * length;
129
131
  return resultSize >= lowerBound && resultSize <= upperBound;
130
132
  }
131
- function resolutionDoesMatch(searcheeName, candidateName, matchMode) {
133
+ function resolutionDoesMatch(searcheeName, candidateName) {
132
134
  const searcheeRes = searcheeName
133
135
  .match(RES_STRICT_REGEX)
134
136
  ?.groups?.res?.trim()
@@ -137,32 +139,11 @@ function resolutionDoesMatch(searcheeName, candidateName, matchMode) {
137
139
  .match(RES_STRICT_REGEX)
138
140
  ?.groups?.res?.trim()
139
141
  ?.toLowerCase();
140
- if (searcheeRes === candidateRes) {
142
+ if (!searcheeRes || !candidateRes)
141
143
  return true;
142
- }
143
- // if we are unsure, pass in risky or partial mode but fail in safe mode
144
- if (!searcheeRes || !candidateRes) {
145
- return matchMode !== MatchMode.SAFE;
146
- }
147
144
  return extractInt(searcheeRes) === extractInt(candidateRes);
148
145
  }
149
- function releaseVersionDoesMatch(searcheeName, candidateName, matchMode) {
150
- const searcheeVersionType = stripExtension(searcheeName).match(REPACK_PROPER_REGEX);
151
- const candidateVersionType = stripExtension(candidateName).match(REPACK_PROPER_REGEX);
152
- const searcheeTypeStr = searcheeVersionType?.groups?.type
153
- ?.trim()
154
- ?.toLowerCase();
155
- const candidateTypeStr = candidateVersionType?.groups?.type
156
- ?.trim()
157
- ?.toLowerCase();
158
- const arrProperType = stripExtension(searcheeName).match(ARR_PROPER_REGEX)?.groups?.arrtype;
159
- if (searcheeTypeStr !== candidateTypeStr ||
160
- (arrProperType && candidateVersionType)) {
161
- return matchMode !== MatchMode.SAFE;
162
- }
163
- return true;
164
- }
165
- function releaseGroupDoesMatch(searcheeName, candidateName, matchMode) {
146
+ function releaseGroupDoesMatch(searcheeName, candidateName) {
166
147
  const searcheeReleaseGroup = stripExtension(searcheeName)
167
148
  .match(RELEASE_GROUP_REGEX)
168
149
  ?.groups?.group?.trim()
@@ -171,60 +152,97 @@ function releaseGroupDoesMatch(searcheeName, candidateName, matchMode) {
171
152
  .match(RELEASE_GROUP_REGEX)
172
153
  ?.groups?.group?.trim()
173
154
  ?.toLowerCase();
174
- if (searcheeReleaseGroup === candidateReleaseGroup) {
155
+ if (!searcheeReleaseGroup || !candidateReleaseGroup) {
156
+ return true; // Pass if missing -GRP
157
+ }
158
+ if (searcheeReleaseGroup.startsWith(candidateReleaseGroup) ||
159
+ candidateReleaseGroup.startsWith(searcheeReleaseGroup)) {
160
+ return true; // -GRP matches
161
+ }
162
+ // Anime naming can cause weird things to match as release groups
163
+ const searcheeAnimeGroup = searcheeName
164
+ .match(ANIME_GROUP_REGEX)
165
+ ?.groups?.group?.trim()
166
+ ?.toLowerCase();
167
+ const candidateAnimeGroup = candidateName
168
+ .match(ANIME_GROUP_REGEX)
169
+ ?.groups?.group?.trim()
170
+ ?.toLowerCase();
171
+ if (!searcheeAnimeGroup && !candidateAnimeGroup) {
172
+ return false;
173
+ }
174
+ // Most checks will never get here, below are rare edge cases
175
+ if (searcheeAnimeGroup === candidateAnimeGroup) {
175
176
  return true;
176
177
  }
177
- // if we are unsure, pass in risky or partial mode but fail in safe mode
178
- if (!searcheeReleaseGroup || !candidateReleaseGroup) {
179
- return matchMode !== MatchMode.SAFE;
178
+ if (searcheeAnimeGroup && searcheeAnimeGroup === candidateReleaseGroup) {
179
+ return true;
180
+ }
181
+ if (candidateAnimeGroup && searcheeReleaseGroup === candidateAnimeGroup) {
182
+ return true;
180
183
  }
181
- return searcheeReleaseGroup.startsWith(candidateReleaseGroup);
184
+ return false;
182
185
  }
183
- async function assessCandidateHelper(candidate, searchee, hashesToExclude) {
186
+ function sourceDoesMatch(searcheeName, candidateName) {
187
+ const searcheeSource = parseSource(searcheeName);
188
+ const candidateSource = parseSource(candidateName);
189
+ if (!searcheeSource || !candidateSource)
190
+ return true;
191
+ return searcheeSource === candidateSource;
192
+ }
193
+ async function assessCandidateHelper(metaOrCandidate, searchee, hashesToExclude) {
184
194
  const { matchMode, blockList } = getRuntimeConfig();
185
- const { name, size, link } = candidate;
186
- if (!releaseGroupDoesMatch(searchee.name, name, matchMode)) {
187
- return { decision: Decision.RELEASE_GROUP_MISMATCH };
188
- }
189
- if (!releaseVersionDoesMatch(searchee.name, name, matchMode)) {
190
- return { decision: Decision.PROPER_REPACK_MISMATCH };
191
- }
192
- if (size) {
193
- if (!fuzzySizeDoesMatch(size, searchee)) {
194
- return { decision: Decision.FUZZY_SIZE_MISMATCH };
195
+ // When metaOrCandidate is a Metafile, skip straight to the
196
+ // main matching algorithms as we don't need pre-download filtering.
197
+ const isCandidate = !(metaOrCandidate instanceof Metafile);
198
+ const name = metaOrCandidate.name;
199
+ const size = isCandidate ? metaOrCandidate.size : metaOrCandidate.length;
200
+ if (isCandidate) {
201
+ if (!releaseGroupDoesMatch(searchee.name, name)) {
202
+ return { decision: Decision.RELEASE_GROUP_MISMATCH };
195
203
  }
196
- }
197
- else {
198
- if (!resolutionDoesMatch(searchee.name, name, matchMode)) {
204
+ if (!resolutionDoesMatch(searchee.name, name)) {
199
205
  return { decision: Decision.RESOLUTION_MISMATCH };
200
206
  }
201
- }
202
- if (!link) {
203
- return { decision: Decision.NO_DOWNLOAD_LINK };
207
+ if (!sourceDoesMatch(searchee.name, name)) {
208
+ return { decision: Decision.SOURCE_MISMATCH };
209
+ }
210
+ if (size && !fuzzySizeDoesMatch(size, searchee)) {
211
+ return { decision: Decision.FUZZY_SIZE_MISMATCH };
212
+ }
213
+ if (!metaOrCandidate.link) {
214
+ return { decision: Decision.NO_DOWNLOAD_LINK };
215
+ }
204
216
  }
205
217
  if (findBlockedStringInReleaseMaybe(searchee, blockList)) {
206
218
  return { decision: Decision.BLOCKED_RELEASE };
207
219
  }
208
- let res = await snatch(candidate);
209
- if (res.isErr()) {
210
- const e = res.unwrapErr();
211
- if ([Label.ANNOUNCE, Label.RSS].includes(searchee.label) &&
212
- ![SnatchError.RATE_LIMITED, SnatchError.MAGNET_LINK].includes(e)) {
213
- await wait(ms("30 seconds"));
214
- res = await snatch(candidate);
215
- }
220
+ let metafile;
221
+ if (isCandidate) {
222
+ let res = await snatch(metaOrCandidate);
216
223
  if (res.isErr()) {
217
- const err = res.unwrapErr();
218
- return err === SnatchError.MAGNET_LINK
219
- ? { decision: Decision.MAGNET_LINK }
220
- : err === SnatchError.RATE_LIMITED
221
- ? { decision: Decision.RATE_LIMITED }
222
- : { decision: Decision.DOWNLOAD_FAILED };
224
+ const e = res.unwrapErr();
225
+ if ([Label.ANNOUNCE, Label.RSS].includes(searchee.label) &&
226
+ ![SnatchError.RATE_LIMITED, SnatchError.MAGNET_LINK].includes(e)) {
227
+ await wait(ms("30 seconds"));
228
+ res = await snatch(metaOrCandidate);
229
+ }
230
+ if (res.isErr()) {
231
+ const err = res.unwrapErr();
232
+ return err === SnatchError.MAGNET_LINK
233
+ ? { decision: Decision.MAGNET_LINK }
234
+ : err === SnatchError.RATE_LIMITED
235
+ ? { decision: Decision.RATE_LIMITED }
236
+ : { decision: Decision.DOWNLOAD_FAILED };
237
+ }
223
238
  }
239
+ metafile = res.unwrap();
240
+ cacheTorrentFile(metafile);
241
+ metaOrCandidate.size = metafile.length; // Trackers can be wrong
242
+ }
243
+ else {
244
+ metafile = metaOrCandidate;
224
245
  }
225
- const metafile = res.unwrap();
226
- cacheTorrentFile(metafile);
227
- candidate.size = metafile.length; // Trackers can be wrong
228
246
  if (hashesToExclude.includes(metafile.infoHash)) {
229
247
  return { decision: Decision.INFO_HASH_ALREADY_EXISTS, metafile };
230
248
  }
@@ -267,22 +285,25 @@ function cacheTorrentFile(meta) {
267
285
  return;
268
286
  writeFileSync(torrentPath, meta.encode());
269
287
  }
270
- async function assessAndSaveResults(result, searchee, guid, infoHashesToExclude) {
271
- const assessment = await assessCandidateHelper(result, searchee, infoHashesToExclude);
288
+ async function assessAndSaveResults(metaOrCandidate, searchee, guid, infoHashesToExclude, firstSeen) {
289
+ const assessment = await assessCandidateHelper(metaOrCandidate, searchee, infoHashesToExclude);
272
290
  await db.transaction(async (trx) => {
273
- const now = Date.now();
274
291
  const { id } = await trx("searchee")
275
292
  .select("id")
276
293
  .where({ name: searchee.name })
277
294
  .first();
278
- await trx("decision").insert({
295
+ await trx("decision")
296
+ .insert({
279
297
  searchee_id: id,
280
298
  guid: guid,
281
- decision: assessment.decision,
282
299
  info_hash: assessment.metafile?.infoHash ?? null,
283
- last_seen: now,
284
- first_seen: now,
285
- });
300
+ decision: assessment.decision,
301
+ first_seen: firstSeen,
302
+ last_seen: Date.now(),
303
+ fuzzy_size_factor: getFuzzySizeFactor(),
304
+ })
305
+ .onConflict(["searchee_id", "guid"])
306
+ .merge();
286
307
  });
287
308
  return assessment;
288
309
  }
@@ -291,52 +312,67 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
291
312
  const logReason = createReasonLogger(name, tracker, searchee.name);
292
313
  const cacheEntry = await db("decision")
293
314
  .select({
294
- decision: "decision.decision",
295
- infoHash: "decision.info_hash",
296
315
  id: "decision.id",
316
+ infoHash: "decision.info_hash",
317
+ decision: "decision.decision",
318
+ firstSeen: "decision.first_seen",
319
+ fuzzySizeFactor: "decision.fuzzy_size_factor",
297
320
  })
298
321
  .join("searchee", "decision.searchee_id", "searchee.id")
299
322
  .where({ name: searchee.name, guid })
300
323
  .first();
324
+ const metaInfoHash = (await db("decision")
325
+ .select({ infoHash: "decision.info_hash" })
326
+ .where({ guid })
327
+ .whereNotNull("info_hash")
328
+ .first())?.infoHash; // Can be from a previous similar searchee's snatch
329
+ const metaOrCandidate = metaInfoHash
330
+ ? existsInTorrentCache(metaInfoHash)
331
+ ? await getCachedTorrentFile(metaInfoHash)
332
+ : candidate
333
+ : candidate;
334
+ if (metaOrCandidate instanceof Metafile) {
335
+ logger.verbose({
336
+ label: Label.DECIDE,
337
+ message: `Using ${metaInfoHash}.cached.torrent for ${tracker} assessment ${name}`,
338
+ });
339
+ candidate.size = metaOrCandidate.length; // Trackers can be wrong
340
+ }
301
341
  let assessment;
302
- if (!cacheEntry?.decision ||
303
- cacheEntry.decision === Decision.DOWNLOAD_FAILED ||
304
- cacheEntry.decision === Decision.RATE_LIMITED) {
305
- assessment = await assessAndSaveResults(candidate, searchee, guid, infoHashesToExclude);
306
- logReason(assessment.decision, false, searchee, candidate);
342
+ if (!cacheEntry?.decision) {
343
+ // New candiate, could be metafile from cache
344
+ assessment = await assessAndSaveResults(metaOrCandidate, searchee, guid, infoHashesToExclude, Date.now());
307
345
  }
308
346
  else if (isAnyMatchedDecision(cacheEntry.decision) &&
309
347
  infoHashesToExclude.includes(cacheEntry.infoHash)) {
310
- // has been added since the last run
348
+ // Already injected fast path, preserve match decision
311
349
  assessment = { decision: Decision.INFO_HASH_ALREADY_EXISTS };
312
- await db("decision")
313
- .where({ id: cacheEntry.id })
314
- .update({ decision: Decision.INFO_HASH_ALREADY_EXISTS });
315
- }
316
- else if (isAnyMatchedDecision(cacheEntry.decision) &&
317
- cacheEntry.infoHash &&
318
- existsInTorrentCache(cacheEntry.infoHash)) {
319
- // cached match
320
- assessment = {
321
- decision: cacheEntry.decision,
322
- metafile: await getCachedTorrentFile(cacheEntry.infoHash),
323
- };
324
- }
325
- else if (isAnyMatchedDecision(cacheEntry.decision)) {
326
- assessment = await assessAndSaveResults(candidate, searchee, guid, infoHashesToExclude);
327
- logReason(assessment.decision, false, searchee, candidate);
350
+ await db("decision").where({ id: cacheEntry.id }).update({
351
+ last_seen: Date.now(),
352
+ });
328
353
  }
329
- else {
330
- // cached rejection
354
+ else if (isStaticDecision(cacheEntry.decision)) {
355
+ // These decisions will never change unless we update their logic
331
356
  assessment = { decision: cacheEntry.decision };
332
- logReason(cacheEntry.decision, true, searchee, candidate);
357
+ await db("decision").where({ id: cacheEntry.id }).update({
358
+ last_seen: Date.now(),
359
+ });
333
360
  }
334
- // if previously known
335
- if (cacheEntry) {
336
- await db("decision")
337
- .where({ id: cacheEntry.id })
338
- .update({ last_seen: Date.now() });
361
+ else {
362
+ // Re-assess decisions using Metafile if cached
363
+ if (cacheEntry.decision !== Decision.FUZZY_SIZE_MISMATCH ||
364
+ cacheEntry.fuzzySizeFactor < getFuzzySizeFactor()) {
365
+ assessment = await assessAndSaveResults(metaOrCandidate, searchee, guid, infoHashesToExclude, cacheEntry.firstSeen);
366
+ }
367
+ else {
368
+ assessment = { decision: Decision.FUZZY_SIZE_MISMATCH };
369
+ await db("decision").where({ id: cacheEntry.id }).update({
370
+ last_seen: Date.now(),
371
+ });
372
+ }
339
373
  }
374
+ const wasCached = cacheEntry?.decision === assessment.decision;
375
+ logReason(assessment.decision, wasCached, searchee, candidate);
340
376
  return assessment;
341
377
  }
342
378
  export { assessCandidateCaching as assessCandidate };
@@ -1 +1 @@
1
- {"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
package/dist/logger.js CHANGED
@@ -53,7 +53,7 @@ function redactMessage(message, options) {
53
53
  let ret = message;
54
54
  ret = ret.replace(/key=[a-zA-Z0-9]+/g, `key=${redactionMsg}`);
55
55
  ret = ret.replace(/pass=[a-zA-Z0-9]+/g, `pass=${redactionMsg}`);
56
- ret = ret.replace(/(?:auto\.\d+\.)([a-zA-Z0-9]+)/g, (match, key) => match.replace(key, redactionMsg));
56
+ ret = ret.replace(/(?:(?:auto|download)[./]\d+[./])([a-zA-Z0-9]+)/g, (match, key) => match.replace(key, redactionMsg));
57
57
  ret = ret.replace(/apiKey: '.+'/g, `apiKey: ${redactionMsg}`);
58
58
  ret = ret.replace(/\/notification\/crossSeed\/[a-zA-Z-0-9_-]+/g, `/notification/crossSeed/${redactionMsg}`);
59
59
  for (const [key, urlStr] of Object.entries(runtimeConfig)) {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ async function up(knex) {
2
+ // Remove null info_hash as we may run out of memory if too many entries
3
+ await knex("decision").whereNull("info_hash").del();
4
+ // Remove duplicate decisions preserving the most recent one
5
+ await knex.raw(`
6
+ DELETE FROM decision
7
+ WHERE id NOT IN (
8
+ SELECT id
9
+ FROM (
10
+ SELECT id, ROW_NUMBER() OVER (PARTITION BY searchee_id, guid ORDER BY last_seen DESC) AS row_num
11
+ FROM decision
12
+ ) AS subquery
13
+ WHERE row_num = 1
14
+ )
15
+ `);
16
+ // Add unique constraint to prevent duplicates and add fuzzy_size_factor
17
+ await knex.schema.alterTable("decision", (table) => {
18
+ table.float("fuzzy_size_factor").defaultTo(0.02);
19
+ table.unique(["searchee_id", "guid"]);
20
+ });
21
+ }
22
+ async function down(knex) {
23
+ return knex.schema.alterTable("decision", (table) => {
24
+ table.dropColumn("fuzzy_size_factor");
25
+ table.dropUnique(["searchee_id", "guid"]);
26
+ });
27
+ }
28
+ export default { name: "06-uniqueDecisions", up, down };
29
+ //# sourceMappingURL=06-uniqueDecisions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"06-uniqueDecisions.js","sourceRoot":"","sources":["../../src/migrations/06-uniqueDecisions.ts"],"names":[],"mappings":"AAEA,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,wEAAwE;IACxE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC;IAEpD,4DAA4D;IAC5D,MAAM,IAAI,CAAC,GAAG,CAAC;;;;;;;;;;KAUX,CAAC,CAAC;IAEN,wEAAwE;IACxE,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjD,KAAK,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE;QACnD,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC;QACtC,KAAK,CAAC,UAAU,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
@@ -4,6 +4,7 @@ import timestamps from "./02-timestamps.js";
4
4
  import rateLimits from "./03-rateLimits.js";
5
5
  import auth from "./04-auth.js";
6
6
  import caps from "./05-caps.js";
7
+ import uniqueDecisions from "./06-uniqueDecisions.js";
7
8
  export const migrations = {
8
9
  getMigrations: () => Promise.resolve([
9
10
  initialSchema,
@@ -12,6 +13,7 @@ export const migrations = {
12
13
  rateLimits,
13
14
  auth,
14
15
  caps,
16
+ uniqueDecisions,
15
17
  ]),
16
18
  getMigrationName: (migration) => migration.name,
17
19
  getMigration: (migration) => migration,
@@ -1 +1 @@
1
- {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,aAAa,EAAE,GAAG,EAAE,CACnB,OAAO,CAAC,OAAO,CAAC;QACf,aAAa;QACb,IAAI;QACJ,UAAU;QACV,UAAU;QACV,IAAI;QACJ,IAAI;KACJ,CAAC;IACH,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;CACtC,CAAC"}
1
+ {"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/migrations/migrations.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAClD,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,UAAU,MAAM,oBAAoB,CAAC;AAC5C,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,IAAI,MAAM,cAAc,CAAC;AAChC,OAAO,eAAe,MAAM,yBAAyB,CAAC;AAEtD,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,aAAa,EAAE,GAAG,EAAE,CACnB,OAAO,CAAC,OAAO,CAAC;QACf,aAAa;QACb,IAAI;QACJ,UAAU;QACV,UAAU;QACV,IAAI;QACJ,IAAI;QACJ,eAAe;KACf,CAAC;IACH,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI;IAC/C,YAAY,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS;CACtC,CAAC"}
package/dist/pipeline.js CHANGED
@@ -32,12 +32,19 @@ async function findOnOtherSites(searchee, hashesToExclude, cachedSearch, progres
32
32
  .onConflict("name")
33
33
  .ignore();
34
34
  const response = await searchTorznab(searchee, cachedSearch, progress);
35
- const searchedIndexers = response.length - cachedSearch.indexerCandidates.length;
35
+ const cachedIndexers = cachedSearch.indexerCandidates.length;
36
+ const searchedIndexers = response.length - cachedIndexers;
36
37
  cachedSearch.indexerCandidates = response;
37
38
  const results = response.flatMap((e) => e.candidates.map((candidate) => ({
38
39
  ...candidate,
39
40
  indexerId: e.indexerId,
40
41
  })));
42
+ if (response.length) {
43
+ logger.verbose({
44
+ label: Label.DECIDE,
45
+ message: `Assessing ${results.length} candidates for ${searchee.name} from ${searchedIndexers}|${cachedIndexers} indexers by search|cache`,
46
+ });
47
+ }
41
48
  const assessments = await assessCandidates(results, searchee, hashesToExclude);
42
49
  const { rateLimited, notRateLimited } = assessments.reduce((acc, cur, idx) => {
43
50
  const candidate = results[idx];
@@ -96,12 +103,12 @@ async function findMatchesBatch(searchees, hashesToExclude) {
96
103
  export async function searchForLocalTorrentByCriteria(criteria) {
97
104
  const { delay, maxDataDepth } = getRuntimeConfig();
98
105
  let rawSearchees;
99
- if (criteria.path) {
100
- const searcheeResults = await Promise.all(findPotentialNestedRoots(criteria.path, maxDataDepth).map(createSearcheeFromPath));
101
- rawSearchees = searcheeResults.filter(isOk).map((t) => t.unwrap());
106
+ if (criteria.infoHash || !criteria.path) {
107
+ rawSearchees = [await getTorrentByCriteria(criteria)];
102
108
  }
103
109
  else {
104
- rawSearchees = [await getTorrentByCriteria(criteria)];
110
+ const searcheeResults = await Promise.all(findPotentialNestedRoots(criteria.path, maxDataDepth).map(createSearcheeFromPath));
111
+ rawSearchees = searcheeResults.filter(isOk).map((t) => t.unwrap());
105
112
  }
106
113
  const searchees = rawSearchees.map((searchee) => ({
107
114
  ...searchee,