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
@@ -2,12 +2,13 @@ import { readdirSync } from "fs";
2
2
  import ms from "ms";
3
3
  import path from "path";
4
4
  import { ABS_WIN_PATH_REGEX, InjectionResult, TORRENT_CATEGORY_SUFFIX, TORRENT_TAG, } from "../constants.js";
5
+ import { memDB } from "../db.js";
5
6
  import { CrossSeedError } from "../errors.js";
6
7
  import { Label, logger } from "../logger.js";
7
8
  import { resultOf, resultOfErr } from "../Result.js";
8
9
  import { getRuntimeConfig } from "../runtimeConfig.js";
9
- import { loadTorrentDirLight } from "../torrent.js";
10
- import { getMaxRemainingBytes, getResumeStopTime, resumeErrSleepTime, resumeSleepTime, shouldRecheck, validateSavePaths, } from "./TorrentClient.js";
10
+ import { createSearcheeFromDB, parseTitle, updateSearcheeClientDB, } from "../searchee.js";
11
+ import { getMaxRemainingBytes, getResumeStopTime, organizeTrackers, resumeErrSleepTime, resumeSleepTime, shouldRecheck, } from "./TorrentClient.js";
11
12
  import { extractCredentialsFromUrl, extractInt, getLogString, humanReadableSize, sanitizeInfoHash, wait, } from "../utils.js";
12
13
  const X_WWW_FORM_URLENCODED = {
13
14
  "Content-Type": "application/x-www-form-urlencoded",
@@ -58,16 +59,13 @@ export default class QBittorrent {
58
59
  await this.createTag();
59
60
  if (!torrentDir)
60
61
  return;
62
+ const { resume_data_storage_type } = await this.getPreferences();
63
+ if (resume_data_storage_type === "SQLite") {
64
+ throw new CrossSeedError("torrentDir is not compatible with SQLite mode in qBittorrent, use: https://www.cross-seed.org/docs/basics/options#useclienttorrents");
65
+ }
61
66
  if (!readdirSync(torrentDir).some((f) => f.endsWith(".fastresume"))) {
62
67
  throw new CrossSeedError("Invalid torrentDir, if no torrents are in client set to null for now: https://www.cross-seed.org/docs/basics/options#torrentdir");
63
68
  }
64
- const searcheesRes = loadTorrentDirLight(torrentDir);
65
- const infoHashPathMap = await this.getAllDownloadDirs({
66
- metas: [], // Don't need to account for subfolder layout
67
- onlyCompleted: false,
68
- v1HashOnly: true,
69
- });
70
- await validateSavePaths(infoHashPathMap, await searcheesRes);
71
69
  }
72
70
  async request(path, body, headers = {}, retries = 3) {
73
71
  const bodyStr = body instanceof FormData
@@ -108,6 +106,13 @@ export default class QBittorrent {
108
106
  }
109
107
  return response?.text();
110
108
  }
109
+ async getPreferences() {
110
+ const responseText = await this.request("/app/preferences", "", X_WWW_FORM_URLENCODED);
111
+ if (!responseText) {
112
+ throw new CrossSeedError(`qBittorrent failed to retrieve preferences`);
113
+ }
114
+ return JSON.parse(responseText);
115
+ }
111
116
  getLayoutForNewTorrent(searchee, searcheeInfo, path) {
112
117
  return path
113
118
  ? "Original"
@@ -166,6 +171,34 @@ export default class QBittorrent {
166
171
  const responseText = await this.request("/torrents/categories", "");
167
172
  return responseText ? Object.values(JSON.parse(responseText)) : [];
168
173
  }
174
+ async getFiles(infoHash) {
175
+ const responseText = await this.request("/torrents/files", `hash=${infoHash}`, X_WWW_FORM_URLENCODED);
176
+ if (!responseText)
177
+ return null;
178
+ try {
179
+ return JSON.parse(responseText).map((file) => ({
180
+ name: path.basename(file.name),
181
+ path: file.name,
182
+ length: file.size,
183
+ }));
184
+ }
185
+ catch (e) {
186
+ logger.debug(e);
187
+ return null;
188
+ }
189
+ }
190
+ async getTrackers(infoHash) {
191
+ const responseText = await this.request("/torrents/trackers", `hash=${infoHash}`, X_WWW_FORM_URLENCODED);
192
+ if (!responseText)
193
+ return null;
194
+ try {
195
+ return organizeTrackers(JSON.parse(responseText));
196
+ }
197
+ catch (e) {
198
+ logger.debug(e);
199
+ return null;
200
+ }
201
+ }
169
202
  async addTorrent(formData) {
170
203
  await this.request("/torrents/add", formData);
171
204
  }
@@ -295,9 +328,90 @@ export default class QBittorrent {
295
328
  infoHash: torrent.hash,
296
329
  category: torrent.category,
297
330
  tags: torrent.tags.length ? torrent.tags.split(",") : [],
298
- trackers: torrent.tracker.length ? [[torrent.tracker]] : undefined,
331
+ trackers: torrent.tracker.length ? [torrent.tracker] : undefined,
299
332
  }));
300
333
  }
334
+ /**
335
+ * Get all searchees from the client and update the db
336
+ * @param options.newSearcheesOnly only return searchees that are not in the db
337
+ * @param options.refresh undefined uses the cache, [] refreshes all searchees, or a list of infoHashes to refresh
338
+ * @return an object containing all searchees and new searchees (refreshed searchees are considered new)
339
+ */
340
+ async getClientSearchees(options) {
341
+ const searchees = [];
342
+ const newSearchees = [];
343
+ const infoHashes = new Set();
344
+ const torrents = await this.getAllTorrentInfo();
345
+ if (!torrents.length) {
346
+ logger.error({
347
+ label: Label.QBITTORRENT,
348
+ message: "No torrents found in client",
349
+ });
350
+ return { searchees, newSearchees };
351
+ }
352
+ for (const torrent of torrents) {
353
+ const infoHash = (torrent.infohash_v1 || torrent.hash).toLowerCase();
354
+ infoHashes.add(infoHash);
355
+ const dbTorrent = await memDB("torrent")
356
+ .where("info_hash", infoHash)
357
+ .first();
358
+ const refresh = options?.refresh === undefined
359
+ ? false
360
+ : options.refresh.length === 0
361
+ ? true
362
+ : options.refresh.includes(infoHash);
363
+ if (dbTorrent && !refresh) {
364
+ if (!options?.newSearcheesOnly) {
365
+ searchees.push(createSearcheeFromDB(dbTorrent));
366
+ }
367
+ continue;
368
+ }
369
+ const files = await this.getFiles(torrent.hash);
370
+ if (!files) {
371
+ logger.verbose({
372
+ label: Label.QBITTORRENT,
373
+ message: `Failed to get files for ${torrent.name} [${sanitizeInfoHash(torrent.hash)}] (likely transient)`,
374
+ });
375
+ continue;
376
+ }
377
+ if (!files.length) {
378
+ logger.verbose({
379
+ label: Label.QBITTORRENT,
380
+ message: `No files found for ${torrent.name} [${sanitizeInfoHash(torrent.hash)}]: skipping`,
381
+ });
382
+ continue;
383
+ }
384
+ const trackers = await this.getTrackers(torrent.hash);
385
+ if (!trackers) {
386
+ logger.verbose({
387
+ label: Label.QBITTORRENT,
388
+ message: `Failed to get trackers for ${torrent.name} [${sanitizeInfoHash(torrent.hash)}] (likely transient)`,
389
+ });
390
+ continue;
391
+ }
392
+ const { name } = torrent;
393
+ const title = parseTitle(name, files) ?? name;
394
+ const length = torrent.total_size;
395
+ const savePath = torrent.save_path;
396
+ const category = torrent.category;
397
+ const tags = torrent.tags.length ? torrent.tags.split(",") : [];
398
+ const searchee = {
399
+ infoHash,
400
+ name,
401
+ title,
402
+ files,
403
+ length,
404
+ savePath,
405
+ category,
406
+ tags,
407
+ trackers,
408
+ };
409
+ newSearchees.push(searchee);
410
+ searchees.push(searchee);
411
+ }
412
+ await updateSearcheeClientDB(newSearchees, infoHashes);
413
+ return { searchees, newSearchees };
414
+ }
301
415
  /**
302
416
  * @param infoHash the infohash of the torrent
303
417
  * @returns whether the torrent is complete
@@ -1 +1 @@
1
- {"version":3,"file":"QBittorrent.js","sourceRoot":"","sources":["../../src/clients/QBittorrent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QBittorrent.js","sourceRoot":"","sources":["../../src/clients/QBittorrent.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,18 @@
1
1
  import { readdirSync } from "fs";
2
2
  import { stat, unlink, writeFile } from "fs/promises";
3
- import { dirname, join, resolve, sep } from "path";
3
+ import { basename, dirname, join, resolve, sep } from "path";
4
4
  import { inspect } from "util";
5
5
  import xmlrpc from "xmlrpc";
6
6
  import { InjectionResult, TORRENT_TAG, } from "../constants.js";
7
+ import { memDB } from "../db.js";
7
8
  import { CrossSeedError } from "../errors.js";
8
9
  import { Label, logger } from "../logger.js";
9
10
  import { Metafile } from "../parseTorrent.js";
10
11
  import { resultOf, resultOfErr } from "../Result.js";
11
12
  import { getRuntimeConfig } from "../runtimeConfig.js";
13
+ import { createSearcheeFromDB, parseTitle, updateSearcheeClientDB, } from "../searchee.js";
12
14
  import { extractCredentialsFromUrl, humanReadableSize, isTruthy, sanitizeInfoHash, wait, } from "../utils.js";
13
- import { getMaxRemainingBytes, getResumeStopTime, resumeErrSleepTime, resumeSleepTime, shouldRecheck, validateSavePaths, } from "./TorrentClient.js";
14
- import { loadTorrentDirLight } from "../torrent.js";
15
+ import { getMaxRemainingBytes, getResumeStopTime, organizeTrackers, resumeErrSleepTime, resumeSleepTime, shouldRecheck, } from "./TorrentClient.js";
15
16
  const COULD_NOT_FIND_INFO_HASH = "Could not find info-hash.";
16
17
  async function createLibTorrentResumeTree(meta, basePath) {
17
18
  async function getFileResumeData(file) {
@@ -83,39 +84,40 @@ export default class RTorrent {
83
84
  async checkOriginalTorrent(infoHash, onlyCompleted) {
84
85
  const hash = infoHash.toUpperCase();
85
86
  let response;
87
+ const args = [
88
+ [
89
+ {
90
+ methodName: "d.name",
91
+ params: [hash],
92
+ },
93
+ {
94
+ methodName: "d.directory",
95
+ params: [hash],
96
+ },
97
+ {
98
+ methodName: "d.left_bytes",
99
+ params: [hash],
100
+ },
101
+ {
102
+ methodName: "d.hashing",
103
+ params: [hash],
104
+ },
105
+ {
106
+ methodName: "d.complete",
107
+ params: [hash],
108
+ },
109
+ {
110
+ methodName: "d.is_multi_file",
111
+ params: [hash],
112
+ },
113
+ {
114
+ methodName: "d.is_active",
115
+ params: [hash],
116
+ },
117
+ ],
118
+ ];
86
119
  try {
87
- response = await this.methodCallP("system.multicall", [
88
- [
89
- {
90
- methodName: "d.name",
91
- params: [hash],
92
- },
93
- {
94
- methodName: "d.directory",
95
- params: [hash],
96
- },
97
- {
98
- methodName: "d.left_bytes",
99
- params: [hash],
100
- },
101
- {
102
- methodName: "d.hashing",
103
- params: [hash],
104
- },
105
- {
106
- methodName: "d.complete",
107
- params: [hash],
108
- },
109
- {
110
- methodName: "d.is_multi_file",
111
- params: [hash],
112
- },
113
- {
114
- methodName: "d.is_active",
115
- params: [hash],
116
- },
117
- ],
118
- ]);
120
+ response = await this.methodCallP("system.multicall", args);
119
121
  }
120
122
  catch (e) {
121
123
  logger.debug(e);
@@ -188,13 +190,6 @@ export default class RTorrent {
188
190
  if (!readdirSync(torrentDir).some((f) => f.endsWith("_resume"))) {
189
191
  throw new CrossSeedError("Invalid torrentDir, if no torrents are in client set to null for now: https://www.cross-seed.org/docs/basics/options#torrentdir");
190
192
  }
191
- const searcheesRes = loadTorrentDirLight(torrentDir);
192
- const allTorrents = await this.getAllTorrents();
193
- const infoHashPathMap = await this.getAllDownloadDirs({
194
- metas: allTorrents.map((torrent) => torrent.infoHash),
195
- onlyCompleted: false,
196
- });
197
- await validateSavePaths(infoHashPathMap, await searcheesRes);
198
193
  }
199
194
  async getDownloadDir(meta, options) {
200
195
  const result = await this.checkOriginalTorrent(meta.infoHash, options.onlyCompleted);
@@ -205,27 +200,28 @@ export default class RTorrent {
205
200
  .mapErr((error) => (error === "FAILURE" ? "UNKNOWN_ERROR" : error));
206
201
  }
207
202
  async getAllDownloadDirs(options) {
208
- if (options.metas.length === 0)
209
- return new Map();
210
- const infoHashes = typeof options.metas[0] === "string"
211
- ? options.metas
212
- : options.metas.map((meta) => meta.infoHash);
203
+ const infoHashes = await this.methodCallP("download_list", []);
213
204
  let response;
205
+ const args = [
206
+ infoHashes
207
+ .map((hash) => [
208
+ {
209
+ methodName: "d.directory",
210
+ params: [hash],
211
+ },
212
+ {
213
+ methodName: "d.is_multi_file",
214
+ params: [hash],
215
+ },
216
+ {
217
+ methodName: "d.complete",
218
+ params: [hash],
219
+ },
220
+ ])
221
+ .flat(),
222
+ ];
214
223
  try {
215
- response = await this.methodCallP("system.multicall", [
216
- infoHashes
217
- .map((hash) => [
218
- {
219
- methodName: "d.directory",
220
- params: [hash],
221
- },
222
- {
223
- methodName: "d.is_multi_file",
224
- params: [hash],
225
- },
226
- ])
227
- .flat(),
228
- ]);
224
+ response = await this.methodCallP("system.multicall", args);
229
225
  }
230
226
  catch (e) {
231
227
  logger.error({
@@ -247,11 +243,15 @@ export default class RTorrent {
247
243
  logger.debug(inspect(response));
248
244
  return new Map();
249
245
  }
250
- return new Map(infoHashes.map((hash, index) => {
251
- const directory = response[index * 2][0];
252
- const isMultiFile = Boolean(Number(response[index * 2 + 1][0]));
253
- return [hash, isMultiFile ? dirname(directory) : directory];
254
- }));
246
+ return infoHashes.reduce((infoHashSavePathMap, hash, index) => {
247
+ const directory = response[index * 3][0];
248
+ const isMultiFile = Boolean(Number(response[index * 3 + 1][0]));
249
+ const isComplete = Boolean(Number(response[index * 3 + 2][0]));
250
+ if (!options.onlyCompleted || isComplete) {
251
+ infoHashSavePathMap.set(hash, isMultiFile ? dirname(directory) : directory);
252
+ }
253
+ return infoHashSavePathMap;
254
+ }, new Map());
255
255
  }
256
256
  catch (e) {
257
257
  logger.error({
@@ -279,15 +279,16 @@ export default class RTorrent {
279
279
  async getAllTorrents() {
280
280
  const infoHashes = await this.methodCallP("download_list", []);
281
281
  let response;
282
+ const args = [
283
+ infoHashes.map((hash) => {
284
+ return {
285
+ methodName: "d.custom1",
286
+ params: [hash],
287
+ };
288
+ }),
289
+ ];
282
290
  try {
283
- response = await this.methodCallP("system.multicall", [
284
- infoHashes.map((hash) => {
285
- return {
286
- methodName: "d.custom1",
287
- params: [hash],
288
- };
289
- }),
290
- ]);
291
+ response = await this.methodCallP("system.multicall", args);
291
292
  }
292
293
  catch (e) {
293
294
  logger.error({
@@ -331,6 +332,131 @@ export default class RTorrent {
331
332
  return [];
332
333
  }
333
334
  }
335
+ async getClientSearchees(options) {
336
+ const searchees = [];
337
+ const newSearchees = [];
338
+ const hashes = await this.methodCallP("download_list", []);
339
+ let response;
340
+ const args = [
341
+ hashes
342
+ .map((hash) => [
343
+ {
344
+ methodName: "d.name",
345
+ params: [hash],
346
+ },
347
+ {
348
+ methodName: "d.size_bytes",
349
+ params: [hash],
350
+ },
351
+ {
352
+ methodName: "d.directory",
353
+ params: [hash],
354
+ },
355
+ {
356
+ methodName: "d.is_multi_file",
357
+ params: [hash],
358
+ },
359
+ {
360
+ methodName: "d.custom1",
361
+ params: [hash],
362
+ },
363
+ {
364
+ methodName: "f.multicall",
365
+ params: [hash, "", "f.path=", "f.size_bytes="],
366
+ },
367
+ {
368
+ methodName: "t.multicall",
369
+ params: [hash, "", "t.url=", "t.group="],
370
+ },
371
+ ])
372
+ .flat(),
373
+ ];
374
+ try {
375
+ response = await this.methodCallP("system.multicall", args);
376
+ }
377
+ catch (e) {
378
+ logger.error({
379
+ Label: Label.RTORRENT,
380
+ message: "Failed to get torrent info for all torrents",
381
+ });
382
+ logger.debug(e);
383
+ return { searchees, newSearchees };
384
+ }
385
+ function isFault(response) {
386
+ return "faultString" in response[0];
387
+ }
388
+ if (isFault(response)) {
389
+ logger.error({
390
+ Label: Label.RTORRENT,
391
+ message: "Fault while getting torrent info for all torrents",
392
+ });
393
+ logger.debug(inspect(response));
394
+ return { searchees, newSearchees };
395
+ }
396
+ const infoHashes = new Set();
397
+ for (let i = 0; i < hashes.length; i++) {
398
+ const infoHash = hashes[i].toLowerCase();
399
+ infoHashes.add(infoHash);
400
+ const dbTorrent = await memDB("torrent")
401
+ .where("info_hash", infoHash)
402
+ .first();
403
+ const refresh = options?.refresh === undefined
404
+ ? false
405
+ : options.refresh.length === 0
406
+ ? true
407
+ : options.refresh.includes(infoHash);
408
+ if (dbTorrent && !refresh) {
409
+ if (!options?.newSearcheesOnly) {
410
+ searchees.push(createSearcheeFromDB(dbTorrent));
411
+ }
412
+ continue;
413
+ }
414
+ const name = response[i * 7][0];
415
+ const length = Number(response[i * 7 + 1][0]);
416
+ const directory = response[i * 7 + 2][0];
417
+ const isMultiFile = Boolean(Number(response[i * 7 + 3][0]));
418
+ const labels = response[i * 7 + 4][0];
419
+ const files = response[i * 7 + 5][0].map((arr) => ({
420
+ name: basename(arr[0]),
421
+ path: isMultiFile ? join(basename(directory), arr[0]) : arr[0],
422
+ length: Number(arr[1]),
423
+ }));
424
+ if (!files.length) {
425
+ logger.verbose({
426
+ label: Label.RTORRENT,
427
+ message: `No files found for ${name} [${sanitizeInfoHash(infoHash)}]: skipping`,
428
+ });
429
+ continue;
430
+ }
431
+ const trackers = organizeTrackers(response[i * 7 + 6][0].map((arr) => ({
432
+ url: arr[0],
433
+ tier: arr[1],
434
+ })));
435
+ const title = parseTitle(name, files) ?? name;
436
+ const savePath = isMultiFile ? dirname(directory) : directory;
437
+ const category = "";
438
+ const tags = labels.length
439
+ ? decodeURIComponent(labels)
440
+ .split(",")
441
+ .map((tag) => tag.trim())
442
+ : [];
443
+ const searchee = {
444
+ infoHash,
445
+ name,
446
+ title,
447
+ files,
448
+ length,
449
+ savePath,
450
+ category,
451
+ tags,
452
+ trackers,
453
+ };
454
+ newSearchees.push(searchee);
455
+ searchees.push(searchee);
456
+ }
457
+ await updateSearcheeClientDB(newSearchees, infoHashes);
458
+ return { searchees, newSearchees };
459
+ }
334
460
  async recheckTorrent(infoHash) {
335
461
  // Pause first as it may resume after recheck automatically
336
462
  await this.methodCallP("d.pause", [infoHash]);