cross-seed 6.0.0-0 → 6.0.0-2
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/README.md +6 -0
- package/dist/action.js +33 -28
- package/dist/action.js.map +1 -1
- package/dist/clients/Deluge.js +49 -28
- package/dist/clients/Deluge.js.map +1 -1
- package/dist/clients/QBittorrent.js +188 -115
- package/dist/clients/QBittorrent.js.map +1 -1
- package/dist/clients/RTorrent.js +4 -8
- package/dist/clients/RTorrent.js.map +1 -1
- package/dist/clients/Transmission.js +3 -5
- package/dist/clients/Transmission.js.map +1 -1
- package/dist/cmd.js +15 -4
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +39 -30
- package/dist/config.template.cjs.map +1 -1
- package/dist/configSchema.js +9 -35
- package/dist/configSchema.js.map +1 -1
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/decide.js +40 -13
- package/dist/decide.js.map +1 -1
- package/dist/pipeline.js +4 -2
- package/dist/pipeline.js.map +1 -1
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/startup.js +6 -0
- package/dist/startup.js.map +1 -1
- package/dist/utils.js +11 -1
- package/dist/utils.js.map +1 -1
- package/package.json +3 -13
@@ -1,9 +1,9 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
1
|
+
import { dirname } from "path";
|
2
|
+
import { InjectionResult, TORRENT_TAG, TORRENT_CATEGORY_SUFFIX, } from "../constants.js";
|
3
3
|
import { CrossSeedError } from "../errors.js";
|
4
|
-
import { Label, logger
|
4
|
+
import { Label, logger } from "../logger.js";
|
5
5
|
import { getRuntimeConfig } from "../runtimeConfig.js";
|
6
|
-
import { extractCredentialsFromUrl } from "../utils.js";
|
6
|
+
import { shouldRecheck, extractCredentialsFromUrl, wait } from "../utils.js";
|
7
7
|
import { resultOf, resultOfErr } from "../Result.js";
|
8
8
|
const X_WWW_FORM_URLENCODED = {
|
9
9
|
"Content-Type": "application/x-www-form-urlencoded",
|
@@ -39,169 +39,242 @@ export default class QBittorrent {
|
|
39
39
|
await this.login();
|
40
40
|
await this.createTag();
|
41
41
|
}
|
42
|
-
async request(path, body, headers = {}, retries =
|
42
|
+
async request(path, body, headers = {}, retries = 3) {
|
43
43
|
logger.verbose({
|
44
44
|
label: Label.QBITTORRENT,
|
45
|
-
message: `Making request to ${path} with body ${
|
45
|
+
message: `Making request (${retries}) to ${path} with body ${JSON.stringify(body)}`,
|
46
46
|
});
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
47
|
+
let response;
|
48
|
+
try {
|
49
|
+
response = await fetch(`${this.url.href}${path}`, {
|
50
|
+
method: "post",
|
51
|
+
headers: { Cookie: this.cookie, ...headers },
|
52
|
+
body,
|
53
|
+
});
|
54
|
+
if (response.status === 403 && retries > 0) {
|
55
|
+
logger.verbose({
|
56
|
+
label: Label.QBITTORRENT,
|
57
|
+
message: "Received 403 from API. Logging in again and retrying",
|
58
|
+
});
|
59
|
+
await this.login();
|
60
|
+
return this.request(path, body, headers, retries - 1);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
catch (e) {
|
64
|
+
if (retries > 0) {
|
65
|
+
logger.verbose({
|
66
|
+
label: Label.QBITTORRENT,
|
67
|
+
message: `Request failed, ${retries} retries remaining: ${e.message}`,
|
68
|
+
});
|
69
|
+
return this.request(path, body, headers, retries - 1);
|
70
|
+
}
|
53
71
|
logger.verbose({
|
54
72
|
label: Label.QBITTORRENT,
|
55
|
-
message:
|
56
|
-
});
|
57
|
-
await this.login();
|
58
|
-
return this.request(path, body, headers, retries - 1);
|
59
|
-
}
|
60
|
-
return response.text();
|
61
|
-
}
|
62
|
-
async setUpCrossSeedCategory(ogCategoryName) {
|
63
|
-
const { dataCategory } = getRuntimeConfig();
|
64
|
-
if (!ogCategoryName)
|
65
|
-
return "";
|
66
|
-
if (ogCategoryName.endsWith(TORRENT_CATEGORY_SUFFIX) ||
|
67
|
-
ogCategoryName === dataCategory)
|
68
|
-
return ogCategoryName;
|
69
|
-
const categoriesStr = await this.request("/torrents/categories", "");
|
70
|
-
const categories = JSON.parse(categoriesStr);
|
71
|
-
const ogCategory = categories[ogCategoryName];
|
72
|
-
const newCategoryName = `${ogCategoryName}${TORRENT_CATEGORY_SUFFIX}`;
|
73
|
-
const maybeNewCategory = categories[newCategoryName];
|
74
|
-
if (!ogCategory.savePath) {
|
75
|
-
logOnce(`qbit/cat/no-save-path/${ogCategoryName}`, () => {
|
76
|
-
logger.warn(`qBittorrent category "${ogCategoryName}" has no save path. Set a save path to prevent Missing Files errors.`);
|
73
|
+
message: `Request failed after ${retries} retries: ${e.message}`,
|
77
74
|
});
|
78
75
|
}
|
79
|
-
|
80
|
-
|
76
|
+
return response?.text();
|
77
|
+
}
|
78
|
+
getLayoutForNewTorrent(searchee, searcheeInfo, path) {
|
79
|
+
return path
|
80
|
+
? "Original"
|
81
|
+
: this.isSubfolderContentLayout(searchee, searcheeInfo)
|
82
|
+
? "Subfolder"
|
83
|
+
: "Original";
|
84
|
+
}
|
85
|
+
getTagsForNewTorrent(searchee, searcheeInfo, category) {
|
86
|
+
const { duplicateCategories } = getRuntimeConfig();
|
87
|
+
/* get the original category if torrent based - cuz otherwise we
|
88
|
+
* use 'category'. this addresses path being truthy but still being
|
89
|
+
* torrent searchee
|
90
|
+
*/
|
91
|
+
const categoryForTagging = searcheeInfo
|
92
|
+
? searcheeInfo.category
|
93
|
+
: category;
|
94
|
+
if (!categoryForTagging || categoryForTagging.length === 0) {
|
95
|
+
return TORRENT_TAG;
|
81
96
|
}
|
82
|
-
|
83
|
-
|
97
|
+
if (category.endsWith(TORRENT_CATEGORY_SUFFIX)) {
|
98
|
+
if (duplicateCategories) {
|
99
|
+
return `${TORRENT_TAG},${categoryForTagging}`;
|
100
|
+
}
|
101
|
+
else {
|
102
|
+
return TORRENT_TAG;
|
103
|
+
}
|
104
|
+
}
|
105
|
+
if (searchee.path) {
|
106
|
+
return TORRENT_TAG;
|
107
|
+
}
|
108
|
+
else if (duplicateCategories) {
|
109
|
+
return `${TORRENT_TAG},${categoryForTagging}${TORRENT_CATEGORY_SUFFIX}`;
|
84
110
|
}
|
85
111
|
else {
|
86
|
-
|
112
|
+
return TORRENT_TAG;
|
87
113
|
}
|
88
|
-
return newCategoryName;
|
89
114
|
}
|
90
115
|
async createTag() {
|
91
116
|
await this.request("/torrents/createTags", `tags=${TORRENT_TAG}`, X_WWW_FORM_URLENCODED);
|
92
117
|
}
|
93
|
-
async
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
}
|
99
|
-
catch (e) {
|
100
|
-
return false;
|
101
|
-
}
|
118
|
+
async addTorrent(formData) {
|
119
|
+
await this.request("/torrents/add", formData);
|
120
|
+
}
|
121
|
+
async recheckTorrent(torrentInfo) {
|
122
|
+
await this.request("/torrents/recheck", `hashes=${torrentInfo.hash}`, X_WWW_FORM_URLENCODED);
|
102
123
|
}
|
124
|
+
/*
|
125
|
+
@param searchee the Searchee we are generating off (in client)
|
126
|
+
@return either a string containing the path or a error mesage
|
127
|
+
*/
|
103
128
|
async getDownloadDir(searchee) {
|
104
|
-
let torrentInfo;
|
105
129
|
try {
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
130
|
+
const torrentInfo = await this.getTorrentInfo(searchee.infoHash);
|
131
|
+
if (!torrentInfo) {
|
132
|
+
return resultOfErr("NOT_FOUND");
|
133
|
+
}
|
134
|
+
if (!this.isTorrentComplete(torrentInfo)) {
|
135
|
+
return resultOfErr("TORRENT_NOT_COMPLETE");
|
111
136
|
}
|
137
|
+
const savePath = this.getCorrectSavePath(searchee, torrentInfo);
|
138
|
+
return resultOf(savePath);
|
112
139
|
}
|
113
140
|
catch (e) {
|
114
|
-
if (e.includes("retrieve")) {
|
141
|
+
if (e.message.includes("retrieve")) {
|
115
142
|
return resultOfErr("NOT_FOUND");
|
116
143
|
}
|
117
144
|
return resultOfErr("UNKNOWN_ERROR");
|
118
145
|
}
|
119
|
-
return resultOf(torrentInfo.save_path);
|
120
146
|
}
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
147
|
+
/*
|
148
|
+
@param searchee the Searchee we are generating off (in client)
|
149
|
+
@param torrentInfo the torrent info from the searchee
|
150
|
+
@return string absolute location from client with content layout considered
|
151
|
+
*/
|
152
|
+
getCorrectSavePath(searchee, torrentInfo) {
|
153
|
+
const subfolderContentLayout = this.isSubfolderContentLayout(searchee, torrentInfo);
|
154
|
+
if (subfolderContentLayout) {
|
155
|
+
return dirname(torrentInfo.content_path);
|
126
156
|
}
|
127
|
-
|
128
|
-
return {
|
129
|
-
save_path,
|
130
|
-
isComplete: progress === 1,
|
131
|
-
autoTMM: auto_tmm,
|
132
|
-
category,
|
133
|
-
};
|
157
|
+
return torrentInfo.save_path;
|
134
158
|
}
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
159
|
+
/*
|
160
|
+
@return array of query results
|
161
|
+
*/
|
162
|
+
async getAllTorrentInfo() {
|
163
|
+
const responseText = await this.request("/torrents/info", "");
|
164
|
+
if (!responseText) {
|
165
|
+
return [];
|
166
|
+
}
|
167
|
+
return JSON.parse(responseText);
|
168
|
+
}
|
169
|
+
/*
|
170
|
+
@param hash the hash of the torrent or undefined for all torrents
|
171
|
+
@return array of query results
|
172
|
+
*/
|
173
|
+
async getTorrentInfo(hash) {
|
174
|
+
if (!hash)
|
175
|
+
return undefined;
|
176
|
+
const responseText = await this.request("/torrents/info", `hashes=${hash}`, X_WWW_FORM_URLENCODED);
|
177
|
+
if (responseText) {
|
178
|
+
const torrents = JSON.parse(responseText);
|
179
|
+
if (torrents.length > 0) {
|
180
|
+
return torrents[0];
|
181
|
+
}
|
182
|
+
}
|
183
|
+
logger.verbose({
|
184
|
+
label: Label.QBITTORRENT,
|
185
|
+
message: `Failed to retrieve torrent info using infohash_v1 ${hash}, checking all hashes`,
|
186
|
+
});
|
187
|
+
const torrents = await this.getAllTorrentInfo();
|
188
|
+
return torrents.find((torrent) => hash === torrent.hash ||
|
189
|
+
hash === torrent.infohash_v1 ||
|
190
|
+
hash === torrent.infohash_v2);
|
191
|
+
}
|
192
|
+
isTorrentComplete(torrentInfo) {
|
193
|
+
return [
|
194
|
+
"uploading",
|
195
|
+
"pausedUP",
|
196
|
+
"stoppedUP",
|
197
|
+
"queuedUP",
|
198
|
+
"stalledUP",
|
199
|
+
"checkingUP",
|
200
|
+
"forcedUP",
|
201
|
+
].includes(torrentInfo.state);
|
202
|
+
}
|
203
|
+
isSubfolderContentLayout(searchee, searcheeInfo) {
|
204
|
+
if (searchee.files.length > 1)
|
205
|
+
return false;
|
206
|
+
if (dirname(searchee.files[0].path) !== ".")
|
207
|
+
return false;
|
208
|
+
return dirname(searcheeInfo.content_path) !== searcheeInfo.save_path;
|
140
209
|
}
|
141
210
|
async inject(newTorrent, searchee, decision, path) {
|
142
|
-
const {
|
211
|
+
const { flatLinking, linkCategory } = getRuntimeConfig();
|
143
212
|
try {
|
144
|
-
if (await this.
|
213
|
+
if (await this.getTorrentInfo(newTorrent.infoHash)) {
|
145
214
|
return InjectionResult.ALREADY_EXISTS;
|
146
215
|
}
|
147
|
-
const
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
216
|
+
const searcheeInfo = await this.getTorrentInfo(searchee.infoHash);
|
217
|
+
// This should be extremly rare as we just linked successfully
|
218
|
+
if (searchee.infoHash && !searcheeInfo && path) {
|
219
|
+
logger.warning({
|
220
|
+
label: Label.QBITTORRENT,
|
221
|
+
message: `Searchee torrent may have been deleted, tagging may not meet expectations: ${searchee.infoHash}`,
|
222
|
+
});
|
223
|
+
}
|
224
|
+
// This is never possible, being made explicit here
|
225
|
+
if (!searcheeInfo && !path) {
|
226
|
+
throw new Error(`Searchee torrent may have been deleted: ${searchee.infoHash}`);
|
227
|
+
}
|
228
|
+
const { savePath, isComplete, autoTMM, category } = path
|
152
229
|
? {
|
153
|
-
|
230
|
+
savePath: path,
|
154
231
|
isComplete: true,
|
155
232
|
autoTMM: false,
|
156
|
-
category:
|
233
|
+
category: linkCategory,
|
157
234
|
}
|
158
|
-
:
|
159
|
-
|
160
|
-
|
161
|
-
|
235
|
+
: {
|
236
|
+
savePath: searcheeInfo.save_path,
|
237
|
+
isComplete: this.isTorrentComplete(searcheeInfo),
|
238
|
+
autoTMM: searcheeInfo.auto_tmm,
|
239
|
+
category: searcheeInfo.category,
|
240
|
+
};
|
162
241
|
if (!isComplete)
|
163
242
|
return InjectionResult.TORRENT_NOT_COMPLETE;
|
164
|
-
const
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
243
|
+
const filename = `${newTorrent.getFileSystemSafeName()}.${TORRENT_TAG}.torrent`;
|
244
|
+
const buffer = new Blob([newTorrent.encode()], {
|
245
|
+
type: "application/x-bittorrent",
|
246
|
+
});
|
247
|
+
const toRecheck = shouldRecheck(decision);
|
248
|
+
// ---------------------- Building form data ----------------------
|
170
249
|
const formData = new FormData();
|
171
250
|
formData.append("torrents", buffer, filename);
|
172
|
-
formData.append("tags", TORRENT_TAG);
|
173
|
-
formData.append("category", newCategoryName);
|
174
|
-
if (autoTMM) {
|
175
|
-
formData.append("autoTMM", "true");
|
176
|
-
}
|
177
|
-
else {
|
178
|
-
formData.append("autoTMM", "false");
|
179
|
-
formData.append("savepath", save_path);
|
180
|
-
}
|
181
251
|
if (path) {
|
182
|
-
formData.append("
|
183
|
-
formData.append("skip_checking", skipRecheck.toString());
|
184
|
-
formData.append("paused", (!skipRecheck).toString());
|
185
|
-
}
|
186
|
-
else {
|
187
|
-
formData.append("contentLayout", contentLayout);
|
188
|
-
formData.append("skip_checking", skipRecheckTorrent.toString());
|
189
|
-
formData.append("paused", (!skipRecheckTorrent).toString());
|
252
|
+
formData.append("savepath", savePath);
|
190
253
|
}
|
254
|
+
formData.append("autoTMM", flatLinking && searchee.infoHash ? autoTMM.toString() : "false");
|
255
|
+
formData.append("category", category);
|
256
|
+
formData.append("tags", this.getTagsForNewTorrent(searchee, searcheeInfo, category));
|
257
|
+
formData.append("contentLayout", this.getLayoutForNewTorrent(searchee, searcheeInfo, path));
|
258
|
+
formData.append("skip_checking", (!toRecheck).toString());
|
259
|
+
formData.append("paused", toRecheck.toString());
|
191
260
|
// for some reason the parser parses the last kv pair incorrectly
|
192
261
|
// it concats the value and the sentinel
|
193
262
|
formData.append("foo", "bar");
|
194
|
-
await this.
|
195
|
-
|
196
|
-
|
197
|
-
|
263
|
+
await this.addTorrent(formData);
|
264
|
+
await wait(1000);
|
265
|
+
const newInfo = await this.getTorrentInfo(newTorrent.infoHash);
|
266
|
+
if (!newInfo) {
|
267
|
+
throw new Error(`Failed to retrieve torrent after adding`);
|
268
|
+
}
|
269
|
+
if (toRecheck) {
|
270
|
+
await this.recheckTorrent(newInfo);
|
198
271
|
}
|
199
272
|
return InjectionResult.SUCCESS;
|
200
273
|
}
|
201
274
|
catch (e) {
|
202
275
|
logger.debug({
|
203
276
|
label: Label.QBITTORRENT,
|
204
|
-
message: `
|
277
|
+
message: `Injection failed: ${e.message}`,
|
205
278
|
});
|
206
279
|
return InjectionResult.FAILURE;
|
207
280
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"QBittorrent.js","sourceRoot":"","sources":["../../src/clients/QBittorrent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"QBittorrent.js","sourceRoot":"","sources":["../../src/clients/QBittorrent.ts"],"names":[],"mappings":"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"}
|
package/dist/clients/RTorrent.js
CHANGED
@@ -2,13 +2,13 @@ import { stat, unlink, writeFile } from "fs/promises";
|
|
2
2
|
import { dirname, join, resolve, sep } from "path";
|
3
3
|
import { inspect } from "util";
|
4
4
|
import xmlrpc from "xmlrpc";
|
5
|
-
import {
|
5
|
+
import { InjectionResult, TORRENT_TAG } from "../constants.js";
|
6
6
|
import { CrossSeedError } from "../errors.js";
|
7
7
|
import { Label, logger } from "../logger.js";
|
8
8
|
import { Metafile } from "../parseTorrent.js";
|
9
9
|
import { resultOf, resultOfErr } from "../Result.js";
|
10
10
|
import { getRuntimeConfig } from "../runtimeConfig.js";
|
11
|
-
import { extractCredentialsFromUrl, wait } from "../utils.js";
|
11
|
+
import { shouldRecheck, extractCredentialsFromUrl, wait } from "../utils.js";
|
12
12
|
const COULD_NOT_FIND_INFO_HASH = "Could not find info-hash.";
|
13
13
|
async function createLibTorrentResumeTree(meta, basePath) {
|
14
14
|
async function getFileResumeData(file) {
|
@@ -178,7 +178,7 @@ export default class RTorrent {
|
|
178
178
|
.mapErr((error) => (error === "FAILURE" ? "UNKNOWN_ERROR" : error));
|
179
179
|
}
|
180
180
|
async inject(meta, searchee, decision, path) {
|
181
|
-
const { outputDir
|
181
|
+
const { outputDir } = getRuntimeConfig();
|
182
182
|
if (await this.checkForInfoHashInClient(meta.infoHash)) {
|
183
183
|
return InjectionResult.ALREADY_EXISTS;
|
184
184
|
}
|
@@ -196,11 +196,7 @@ export default class RTorrent {
|
|
196
196
|
const { directoryBase, basePath } = result.unwrapOrThrow();
|
197
197
|
const torrentFilePath = resolve(outputDir, `${meta.name}.tmp.${Date.now()}.torrent`);
|
198
198
|
await saveWithLibTorrentResume(meta, torrentFilePath, basePath);
|
199
|
-
const loadType = decision
|
200
|
-
? skipRecheck
|
201
|
-
? "load.start"
|
202
|
-
: "load"
|
203
|
-
: "load.start";
|
199
|
+
const loadType = shouldRecheck(decision) ? "load" : "load.start";
|
204
200
|
for (let i = 0; i < 5; i++) {
|
205
201
|
try {
|
206
202
|
await this.methodCallP(loadType, [
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"RTorrent.js","sourceRoot":"","sources":["../../src/clients/RTorrent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,MAAkB,MAAM,QAAQ,CAAC;AACxC,OAAO,
|
1
|
+
{"version":3,"file":"RTorrent.js","sourceRoot":"","sources":["../../src/clients/RTorrent.ts"],"names":[],"mappings":"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"}
|
@@ -1,9 +1,9 @@
|
|
1
|
-
import {
|
1
|
+
import { InjectionResult, TORRENT_TAG } from "../constants.js";
|
2
2
|
import { CrossSeedError } from "../errors.js";
|
3
3
|
import { Label, logger } from "../logger.js";
|
4
4
|
import { resultOf, resultOfErr } from "../Result.js";
|
5
5
|
import { getRuntimeConfig } from "../runtimeConfig.js";
|
6
|
-
import { extractCredentialsFromUrl } from "../utils.js";
|
6
|
+
import { shouldRecheck, extractCredentialsFromUrl } from "../utils.js";
|
7
7
|
const XTransmissionSessionId = "X-Transmission-Session-Id";
|
8
8
|
function doesAlreadyExist(args) {
|
9
9
|
return "torrent-duplicate" in args;
|
@@ -99,7 +99,6 @@ export default class Transmission {
|
|
99
99
|
.mapErr((err) => (err === "FAILURE" ? "UNKNOWN_ERROR" : err));
|
100
100
|
}
|
101
101
|
async inject(newTorrent, searchee, decision, path) {
|
102
|
-
const { skipRecheck } = getRuntimeConfig();
|
103
102
|
let downloadDir;
|
104
103
|
if (path) {
|
105
104
|
downloadDir = path;
|
@@ -114,12 +113,11 @@ export default class Transmission {
|
|
114
113
|
}
|
115
114
|
}
|
116
115
|
let addResponse;
|
117
|
-
const skipRecheckTorrent = decision === Decision.MATCH_PARTIAL ? skipRecheck : true;
|
118
116
|
try {
|
119
117
|
addResponse = await this.request("torrent-add", {
|
120
118
|
"download-dir": downloadDir,
|
121
119
|
metainfo: newTorrent.encode().toString("base64"),
|
122
|
-
paused:
|
120
|
+
paused: shouldRecheck(decision),
|
123
121
|
labels: [TORRENT_TAG],
|
124
122
|
});
|
125
123
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Transmission.js","sourceRoot":"","sources":["../../src/clients/Transmission.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"Transmission.js","sourceRoot":"","sources":["../../src/clients/Transmission.ts"],"names":[],"mappings":"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"}
|
package/dist/cmd.js
CHANGED
@@ -55,7 +55,7 @@ export async function validateAndSetRuntimeConfig(options) {
|
|
55
55
|
const optionLine = path.length === 2
|
56
56
|
? `${path[0]} (position #${path[1] + 1})`
|
57
57
|
: path;
|
58
|
-
logger.error(`${path.length > 0 ? `Option: ${optionLine}` : "Configuration:"}\n\t\t\t\t${message}\n\t\t\t\t(https://www.cross-seed.org/docs/basics/options${urlPath ? `#${urlPath}` : ""})\n`);
|
58
|
+
logger.error(`${path.length > 0 ? `Option: ${optionLine}` : "Configuration:"}\n\t\t\t\t${message}\n\t\t\t\t(https://www.cross-seed.org/docs/basics/options${urlPath ? `#${urlPath.toLowerCase()}` : ""})\n`);
|
59
59
|
});
|
60
60
|
if (errors?.length > 0) {
|
61
61
|
throw new CrossSeedError(`Your configuration is invalid, please see the ${errors.length > 1 ? "errors" : "error"} above for details.`);
|
@@ -81,14 +81,13 @@ function createCommandWithSharedOptions(name, description) {
|
|
81
81
|
.default(fallback(fileConfig.matchMode, MatchMode.SAFE))
|
82
82
|
.choices(Object.values(MatchMode))
|
83
83
|
.makeOptionMandatory())
|
84
|
-
.option("--
|
84
|
+
.option("--link-category <cat>", "Torrent client category to set on linked torrents", fallback(fileConfig.linkCategory, "cross-seed-link"))
|
85
85
|
.option("--link-dir <dir>", "Directory to output data-matched hardlinks to", fileConfig.linkDir)
|
86
|
-
.option("--
|
86
|
+
.option("--flat-linking", "Use flat linking directory structure (without individual tracker folders)", fallback(fileConfig.flatLinking, false))
|
87
87
|
.addOption(new Option("--link-type <type>", "Use links of this type to inject data-based matches into your client")
|
88
88
|
.default(fallback(fileConfig.linkType, LinkType.SYMLINK))
|
89
89
|
.choices(Object.values(LinkType))
|
90
90
|
.makeOptionMandatory())
|
91
|
-
.option("--skip-recheck", "Skips torrent recheck upon adding to QBittorrent", fallback(fileConfig.skipRecheck, false))
|
92
91
|
.option("--max-data-depth <depth>", "Max depth to look for searchees in dataDirs", (n) => parseInt(n), fallback(fileConfig.maxDataDepth, 2))
|
93
92
|
.option("-i, --torrent-dir <dir>", "Directory with torrent files", fileConfig.torrentDir)
|
94
93
|
.option("-s, --output-dir <dir>", "Directory to save results in", fileConfig.outputDir)
|
@@ -140,6 +139,18 @@ program
|
|
140
139
|
});
|
141
140
|
await db.destroy();
|
142
141
|
});
|
142
|
+
program
|
143
|
+
.command("clear-indexer-failures")
|
144
|
+
.description("Clear the cached details of indexers (failures and caps)")
|
145
|
+
.action(async () => {
|
146
|
+
console.log("If you've received a '429' (rate-limiting), continuing to hammer", "your indexers may result in negative consequences.");
|
147
|
+
console.log("If you have to do this more than once in a short", "period of time, you have bigger issues that need to be addressed.");
|
148
|
+
await db("indexer").update({
|
149
|
+
status: null,
|
150
|
+
retry_after: null,
|
151
|
+
});
|
152
|
+
await db.destroy();
|
153
|
+
});
|
143
154
|
program
|
144
155
|
.command("test-notification")
|
145
156
|
.description("Send a test notification")
|