cross-seed 6.0.0-3 → 6.0.0-31
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/Result.js +17 -11
- package/dist/Result.js.map +1 -1
- package/dist/action.js +188 -74
- package/dist/action.js.map +1 -1
- package/dist/arr.js +197 -0
- package/dist/arr.js.map +1 -0
- package/dist/clients/Deluge.js +153 -81
- package/dist/clients/Deluge.js.map +1 -1
- package/dist/clients/QBittorrent.js +95 -64
- package/dist/clients/QBittorrent.js.map +1 -1
- package/dist/clients/RTorrent.js +31 -10
- package/dist/clients/RTorrent.js.map +1 -1
- package/dist/clients/TorrentClient.js.map +1 -1
- package/dist/clients/Transmission.js +30 -10
- package/dist/clients/Transmission.js.map +1 -1
- package/dist/cmd.js +32 -16
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +83 -46
- package/dist/config.template.cjs.map +1 -1
- package/dist/configSchema.js +98 -13
- package/dist/configSchema.js.map +1 -1
- package/dist/configuration.js +3 -0
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +113 -6
- package/dist/constants.js.map +1 -1
- package/dist/dataFiles.js +4 -5
- package/dist/dataFiles.js.map +1 -1
- package/dist/decide.js +276 -160
- package/dist/decide.js.map +1 -1
- package/dist/diff.js +12 -2
- package/dist/diff.js.map +1 -1
- package/dist/errors.js +5 -2
- package/dist/errors.js.map +1 -1
- package/dist/indexers.js +31 -4
- package/dist/indexers.js.map +1 -1
- package/dist/inject.js +409 -0
- package/dist/inject.js.map +1 -0
- package/dist/jobs.js +8 -1
- package/dist/jobs.js.map +1 -1
- package/dist/logger.js +20 -5
- package/dist/logger.js.map +1 -1
- package/dist/migrations/05-caps.js +16 -0
- package/dist/migrations/05-caps.js.map +1 -0
- package/dist/migrations/06-uniqueDecisions.js +29 -0
- package/dist/migrations/06-uniqueDecisions.js.map +1 -0
- package/dist/migrations/migrations.js +11 -1
- package/dist/migrations/migrations.js.map +1 -1
- package/dist/parseTorrent.js +6 -0
- package/dist/parseTorrent.js.map +1 -1
- package/dist/pipeline.js +202 -95
- package/dist/pipeline.js.map +1 -1
- package/dist/preFilter.js +130 -52
- package/dist/preFilter.js.map +1 -1
- package/dist/pushNotifier.js +6 -4
- package/dist/pushNotifier.js.map +1 -1
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/searchee.js +190 -19
- package/dist/searchee.js.map +1 -1
- package/dist/server.js +70 -32
- package/dist/server.js.map +1 -1
- package/dist/startup.js +12 -1
- package/dist/startup.js.map +1 -1
- package/dist/torrent.js +103 -40
- package/dist/torrent.js.map +1 -1
- package/dist/torznab.js +304 -90
- package/dist/torznab.js.map +1 -1
- package/dist/utils.js +215 -33
- package/dist/utils.js.map +1 -1
- package/package.json +3 -1
@@ -1,9 +1,10 @@
|
|
1
|
-
import { dirname } from "path";
|
1
|
+
import { dirname, resolve } from "path";
|
2
2
|
import { InjectionResult, TORRENT_TAG, TORRENT_CATEGORY_SUFFIX, } from "../constants.js";
|
3
3
|
import { CrossSeedError } from "../errors.js";
|
4
4
|
import { Label, logger } from "../logger.js";
|
5
|
+
import ms from "ms";
|
5
6
|
import { getRuntimeConfig } from "../runtimeConfig.js";
|
6
|
-
import { shouldRecheck, extractCredentialsFromUrl, wait } from "../utils.js";
|
7
|
+
import { shouldRecheck, extractCredentialsFromUrl, wait, getLogString, sanitizeInfoHash, } from "../utils.js";
|
7
8
|
import { resultOf, resultOfErr } from "../Result.js";
|
8
9
|
const X_WWW_FORM_URLENCODED = {
|
9
10
|
"Content-Type": "application/x-www-form-urlencoded",
|
@@ -40,9 +41,12 @@ export default class QBittorrent {
|
|
40
41
|
await this.createTag();
|
41
42
|
}
|
42
43
|
async request(path, body, headers = {}, retries = 3) {
|
44
|
+
const bodyStr = body instanceof FormData
|
45
|
+
? JSON.stringify(Object.fromEntries(body))
|
46
|
+
: JSON.stringify(body).replace(/(?:hashes=)([a-z0-9]{40})/i, (match, hash) => match.replace(hash, sanitizeInfoHash(hash)));
|
43
47
|
logger.verbose({
|
44
48
|
label: Label.QBITTORRENT,
|
45
|
-
message: `Making request (${retries}) to ${path} with body ${
|
49
|
+
message: `Making request (${retries}) to ${path} with body ${bodyStr}`,
|
46
50
|
});
|
47
51
|
let response;
|
48
52
|
try {
|
@@ -82,36 +86,32 @@ export default class QBittorrent {
|
|
82
86
|
? "Subfolder"
|
83
87
|
: "Original";
|
84
88
|
}
|
85
|
-
|
89
|
+
getCategoryForNewTorrent(category) {
|
86
90
|
const { duplicateCategories, linkCategory } = getRuntimeConfig();
|
87
|
-
|
88
|
-
|
89
|
-
* torrent searchee
|
90
|
-
*/
|
91
|
-
const categoryForTagging = searcheeInfo
|
92
|
-
? searcheeInfo.category
|
93
|
-
: category;
|
94
|
-
if (!categoryForTagging?.length ||
|
95
|
-
categoryForTagging === linkCategory) {
|
96
|
-
return TORRENT_TAG;
|
91
|
+
if (!duplicateCategories) {
|
92
|
+
return category;
|
97
93
|
}
|
98
|
-
if (
|
99
|
-
if
|
100
|
-
return `${TORRENT_TAG},${categoryForTagging}`;
|
101
|
-
}
|
102
|
-
else {
|
103
|
-
return TORRENT_TAG;
|
104
|
-
}
|
94
|
+
if (!category.length || category === linkCategory) {
|
95
|
+
return category; // Use tags for category duplication if linking
|
105
96
|
}
|
106
|
-
if (
|
107
|
-
return
|
97
|
+
if (category.endsWith(TORRENT_CATEGORY_SUFFIX)) {
|
98
|
+
return category;
|
108
99
|
}
|
109
|
-
|
110
|
-
|
100
|
+
return `${category}${TORRENT_CATEGORY_SUFFIX}`;
|
101
|
+
}
|
102
|
+
getTagsForNewTorrent(searcheeInfo, path) {
|
103
|
+
const { duplicateCategories, linkCategory } = getRuntimeConfig();
|
104
|
+
if (!duplicateCategories || !searcheeInfo || !path) {
|
105
|
+
return TORRENT_TAG; // Require path to duplicate category using tags
|
111
106
|
}
|
112
|
-
|
107
|
+
const searcheeCategory = searcheeInfo.category;
|
108
|
+
if (!searcheeCategory.length || searcheeCategory === linkCategory) {
|
113
109
|
return TORRENT_TAG;
|
114
110
|
}
|
111
|
+
if (searcheeCategory.endsWith(TORRENT_CATEGORY_SUFFIX)) {
|
112
|
+
return `${TORRENT_TAG},${searcheeCategory}`;
|
113
|
+
}
|
114
|
+
return `${TORRENT_TAG},${searcheeCategory}${TORRENT_CATEGORY_SUFFIX}`;
|
115
115
|
}
|
116
116
|
async createTag() {
|
117
117
|
await this.request("/torrents/createTags", `tags=${TORRENT_TAG}`, X_WWW_FORM_URLENCODED);
|
@@ -119,26 +119,30 @@ export default class QBittorrent {
|
|
119
119
|
async addTorrent(formData) {
|
120
120
|
await this.request("/torrents/add", formData);
|
121
121
|
}
|
122
|
-
async recheckTorrent(
|
123
|
-
|
122
|
+
async recheckTorrent(infoHash) {
|
123
|
+
// Pause first as it may resume after recheck automatically
|
124
|
+
await this.request("/torrents/pause", `hashes=${infoHash}`, X_WWW_FORM_URLENCODED);
|
125
|
+
await this.request("/torrents/recheck", `hashes=${infoHash}`, X_WWW_FORM_URLENCODED);
|
124
126
|
}
|
125
127
|
/*
|
126
128
|
@param searchee the Searchee we are generating off (in client)
|
127
129
|
@return either a string containing the path or a error mesage
|
128
130
|
*/
|
129
|
-
async getDownloadDir(
|
131
|
+
async getDownloadDir(meta, options) {
|
130
132
|
try {
|
131
|
-
const torrentInfo = await this.getTorrentInfo(
|
133
|
+
const torrentInfo = await this.getTorrentInfo(meta.infoHash);
|
132
134
|
if (!torrentInfo) {
|
133
135
|
return resultOfErr("NOT_FOUND");
|
134
136
|
}
|
135
|
-
if (
|
137
|
+
if (options.onlyCompleted &&
|
138
|
+
!this.isTorrentInfoComplete(torrentInfo)) {
|
136
139
|
return resultOfErr("TORRENT_NOT_COMPLETE");
|
137
140
|
}
|
138
|
-
const savePath = this.getCorrectSavePath(
|
141
|
+
const savePath = this.getCorrectSavePath(meta, torrentInfo);
|
139
142
|
return resultOf(savePath);
|
140
143
|
}
|
141
144
|
catch (e) {
|
145
|
+
logger.debug(e);
|
142
146
|
if (e.message.includes("retrieve")) {
|
143
147
|
return resultOfErr("NOT_FOUND");
|
144
148
|
}
|
@@ -171,26 +175,42 @@ export default class QBittorrent {
|
|
171
175
|
@param hash the hash of the torrent
|
172
176
|
@return the torrent if it exists
|
173
177
|
*/
|
174
|
-
async getTorrentInfo(hash) {
|
178
|
+
async getTorrentInfo(hash, retries = 0) {
|
175
179
|
if (!hash)
|
176
180
|
return undefined;
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
181
|
+
for (let i = 0; i <= retries; i++) {
|
182
|
+
const responseText = await this.request("/torrents/info", `hashes=${hash}`, X_WWW_FORM_URLENCODED);
|
183
|
+
if (responseText) {
|
184
|
+
const torrents = JSON.parse(responseText);
|
185
|
+
if (torrents.length > 0) {
|
186
|
+
return torrents[0];
|
187
|
+
}
|
188
|
+
}
|
189
|
+
const torrents = await this.getAllTorrentInfo();
|
190
|
+
const torrentInfo = torrents.find((torrent) => hash === torrent.hash ||
|
191
|
+
hash === torrent.infohash_v1 ||
|
192
|
+
hash === torrent.infohash_v2);
|
193
|
+
if (torrentInfo) {
|
194
|
+
return torrentInfo;
|
195
|
+
}
|
196
|
+
if (i < retries) {
|
197
|
+
await wait(ms("1 second") * 2 ** i);
|
182
198
|
}
|
183
199
|
}
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
200
|
+
return undefined;
|
201
|
+
}
|
202
|
+
/**
|
203
|
+
* @param infoHash the infohash of the torrent
|
204
|
+
* @returns whether the torrent is complete
|
205
|
+
*/
|
206
|
+
async isTorrentComplete(infoHash) {
|
207
|
+
const torrentInfo = await this.getTorrentInfo(infoHash);
|
208
|
+
if (!torrentInfo) {
|
209
|
+
return resultOfErr("NOT_FOUND");
|
210
|
+
}
|
211
|
+
return resultOf(this.isTorrentInfoComplete(torrentInfo));
|
192
212
|
}
|
193
|
-
|
213
|
+
isTorrentInfoComplete(torrentInfo) {
|
194
214
|
return [
|
195
215
|
"uploading",
|
196
216
|
"pausedUP",
|
@@ -206,10 +226,11 @@ export default class QBittorrent {
|
|
206
226
|
return false;
|
207
227
|
if (dirname(searchee.files[0].path) !== ".")
|
208
228
|
return false;
|
209
|
-
return dirname(searcheeInfo.content_path) !==
|
229
|
+
return (resolve(dirname(searcheeInfo.content_path)) !==
|
230
|
+
resolve(searcheeInfo.save_path));
|
210
231
|
}
|
211
232
|
async inject(newTorrent, searchee, decision, path) {
|
212
|
-
const {
|
233
|
+
const { linkCategory } = getRuntimeConfig();
|
213
234
|
try {
|
214
235
|
if (await this.getTorrentInfo(newTorrent.infoHash)) {
|
215
236
|
return InjectionResult.ALREADY_EXISTS;
|
@@ -218,12 +239,12 @@ export default class QBittorrent {
|
|
218
239
|
if (!searcheeInfo) {
|
219
240
|
if (!path) {
|
220
241
|
// This is never possible, being made explicit here
|
221
|
-
throw new Error(`Searchee torrent may have been deleted: ${searchee
|
242
|
+
throw new Error(`Searchee torrent may have been deleted: ${getLogString(searchee)}`);
|
222
243
|
}
|
223
244
|
else if (searchee.infoHash) {
|
224
|
-
logger.
|
245
|
+
logger.warn({
|
225
246
|
label: Label.QBITTORRENT,
|
226
|
-
message: `Searchee torrent may have been deleted, tagging may not meet expectations: ${searchee
|
247
|
+
message: `Searchee torrent may have been deleted, tagging may not meet expectations: ${getLogString(searchee)}`,
|
227
248
|
});
|
228
249
|
}
|
229
250
|
}
|
@@ -236,7 +257,7 @@ export default class QBittorrent {
|
|
236
257
|
}
|
237
258
|
: {
|
238
259
|
savePath: searcheeInfo.save_path,
|
239
|
-
isComplete: this.
|
260
|
+
isComplete: this.isTorrentInfoComplete(searcheeInfo),
|
240
261
|
autoTMM: searcheeInfo.auto_tmm,
|
241
262
|
category: searcheeInfo.category,
|
242
263
|
};
|
@@ -246,38 +267,48 @@ export default class QBittorrent {
|
|
246
267
|
const buffer = new Blob([newTorrent.encode()], {
|
247
268
|
type: "application/x-bittorrent",
|
248
269
|
});
|
249
|
-
const toRecheck = shouldRecheck(decision);
|
270
|
+
const toRecheck = shouldRecheck(searchee, decision);
|
250
271
|
// ---------------------- Building form data ----------------------
|
251
272
|
const formData = new FormData();
|
252
273
|
formData.append("torrents", buffer, filename);
|
253
|
-
if (
|
274
|
+
if (!autoTMM) {
|
275
|
+
formData.append("downloadPath", savePath);
|
254
276
|
formData.append("savepath", savePath);
|
255
277
|
}
|
256
|
-
formData.append("autoTMM",
|
257
|
-
formData.append("category", category);
|
258
|
-
formData.append("tags", this.getTagsForNewTorrent(
|
278
|
+
formData.append("autoTMM", autoTMM.toString());
|
279
|
+
formData.append("category", this.getCategoryForNewTorrent(category));
|
280
|
+
formData.append("tags", this.getTagsForNewTorrent(searcheeInfo, path));
|
259
281
|
formData.append("contentLayout", this.getLayoutForNewTorrent(searchee, searcheeInfo, path));
|
260
282
|
formData.append("skip_checking", (!toRecheck).toString());
|
261
283
|
formData.append("paused", toRecheck.toString());
|
262
284
|
// for some reason the parser parses the last kv pair incorrectly
|
263
285
|
// it concats the value and the sentinel
|
264
286
|
formData.append("foo", "bar");
|
265
|
-
|
266
|
-
|
267
|
-
|
287
|
+
try {
|
288
|
+
await this.addTorrent(formData);
|
289
|
+
}
|
290
|
+
catch (e) {
|
291
|
+
logger.error({
|
292
|
+
label: Label.QBITTORRENT,
|
293
|
+
message: `Failed to add torrent (polling client to confirm): ${e.message}`,
|
294
|
+
});
|
295
|
+
logger.debug(e);
|
296
|
+
}
|
297
|
+
const newInfo = await this.getTorrentInfo(newTorrent.infoHash, 5);
|
268
298
|
if (!newInfo) {
|
269
299
|
throw new Error(`Failed to retrieve torrent after adding`);
|
270
300
|
}
|
271
301
|
if (toRecheck) {
|
272
|
-
await this.recheckTorrent(newInfo);
|
302
|
+
await this.recheckTorrent(newInfo.hash);
|
273
303
|
}
|
274
304
|
return InjectionResult.SUCCESS;
|
275
305
|
}
|
276
306
|
catch (e) {
|
277
|
-
logger.
|
307
|
+
logger.error({
|
278
308
|
label: Label.QBITTORRENT,
|
279
|
-
message: `Injection failed: ${e.message}`,
|
309
|
+
message: `Injection failed for ${getLogString(newTorrent)}: ${e.message}`,
|
280
310
|
});
|
311
|
+
logger.debug(e);
|
281
312
|
return InjectionResult.FAILURE;
|
282
313
|
}
|
283
314
|
}
|
@@ -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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"}
|
package/dist/clients/RTorrent.js
CHANGED
@@ -2,7 +2,7 @@ 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 { InjectionResult, TORRENT_TAG } from "../constants.js";
|
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";
|
@@ -83,8 +83,8 @@ export default class RTorrent {
|
|
83
83
|
const downloadList = await this.methodCallP("download_list", []);
|
84
84
|
return downloadList.includes(infoHash.toUpperCase());
|
85
85
|
}
|
86
|
-
async checkOriginalTorrent(
|
87
|
-
const infoHash =
|
86
|
+
async checkOriginalTorrent(data, onlyCompleted) {
|
87
|
+
const infoHash = data.infoHash.toUpperCase();
|
88
88
|
let response;
|
89
89
|
try {
|
90
90
|
response = await this.methodCallP("system.multicall", [
|
@@ -122,7 +122,7 @@ export default class RTorrent {
|
|
122
122
|
}
|
123
123
|
const [[directoryBase], [isCompleteStr], [isMultiFileStr]] = response;
|
124
124
|
const isComplete = Boolean(Number(isCompleteStr));
|
125
|
-
if (!isComplete) {
|
125
|
+
if (onlyCompleted && !isComplete) {
|
126
126
|
return resultOfErr("TORRENT_NOT_COMPLETE");
|
127
127
|
}
|
128
128
|
return resultOf({
|
@@ -144,7 +144,7 @@ export default class RTorrent {
|
|
144
144
|
return resultOf({ downloadDir: path, basePath, directoryBase });
|
145
145
|
}
|
146
146
|
else {
|
147
|
-
const result = await this.checkOriginalTorrent(searchee);
|
147
|
+
const result = await this.checkOriginalTorrent(searchee, true);
|
148
148
|
return result.mapOk(({ directoryBase }) => ({
|
149
149
|
directoryBase,
|
150
150
|
downloadDir: meta.isSingleFileTorrent
|
@@ -169,14 +169,33 @@ export default class RTorrent {
|
|
169
169
|
throw new CrossSeedError(`Failed to reach rTorrent at ${rtorrentRpcUrl}`);
|
170
170
|
}
|
171
171
|
}
|
172
|
-
async getDownloadDir(
|
173
|
-
const result = await this.checkOriginalTorrent(
|
172
|
+
async getDownloadDir(meta, options) {
|
173
|
+
const result = await this.checkOriginalTorrent(meta, options.onlyCompleted);
|
174
174
|
return result
|
175
175
|
.mapOk(({ directoryBase, isMultiFile }) => {
|
176
176
|
return isMultiFile ? dirname(directoryBase) : directoryBase;
|
177
177
|
})
|
178
178
|
.mapErr((error) => (error === "FAILURE" ? "UNKNOWN_ERROR" : error));
|
179
179
|
}
|
180
|
+
async isTorrentComplete(infoHash) {
|
181
|
+
try {
|
182
|
+
const response = await this.methodCallP("d.complete", [
|
183
|
+
infoHash,
|
184
|
+
]);
|
185
|
+
if (response.length === 0) {
|
186
|
+
return resultOfErr("NOT_FOUND");
|
187
|
+
}
|
188
|
+
return resultOf(response[0] === "1");
|
189
|
+
}
|
190
|
+
catch (e) {
|
191
|
+
return resultOfErr("NOT_FOUND");
|
192
|
+
}
|
193
|
+
}
|
194
|
+
async recheckTorrent(infoHash) {
|
195
|
+
// Pause first as it may resume after recheck automatically
|
196
|
+
await this.methodCallP("d.pause", [infoHash]);
|
197
|
+
await this.methodCallP("d.check_hash", [infoHash]);
|
198
|
+
}
|
180
199
|
async inject(meta, searchee, decision, path) {
|
181
200
|
const { outputDir } = getRuntimeConfig();
|
182
201
|
if (await this.checkForInfoHashInClient(meta.infoHash)) {
|
@@ -184,7 +203,7 @@ export default class RTorrent {
|
|
184
203
|
}
|
185
204
|
const result = await this.getDownloadLocation(meta, searchee, path);
|
186
205
|
if (result.isErr()) {
|
187
|
-
switch (result.
|
206
|
+
switch (result.unwrapErr()) {
|
188
207
|
case "NOT_FOUND":
|
189
208
|
return InjectionResult.FAILURE;
|
190
209
|
case "TORRENT_NOT_COMPLETE":
|
@@ -193,10 +212,12 @@ export default class RTorrent {
|
|
193
212
|
return InjectionResult.FAILURE;
|
194
213
|
}
|
195
214
|
}
|
196
|
-
const { directoryBase, basePath } = result.
|
215
|
+
const { directoryBase, basePath } = result.unwrap();
|
197
216
|
const torrentFilePath = resolve(outputDir, `${meta.name}.tmp.${Date.now()}.torrent`);
|
198
217
|
await saveWithLibTorrentResume(meta, torrentFilePath, basePath);
|
199
|
-
const loadType = shouldRecheck(decision)
|
218
|
+
const loadType = shouldRecheck(searchee, decision)
|
219
|
+
? "load"
|
220
|
+
: "load.start";
|
200
221
|
for (let i = 0; i < 5; i++) {
|
201
222
|
try {
|
202
223
|
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 +1 @@
|
|
1
|
-
{"version":3,"file":"TorrentClient.js","sourceRoot":"","sources":["../../src/clients/TorrentClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,IAAI,YAA2B,CAAC;
|
1
|
+
{"version":3,"file":"TorrentClient.js","sourceRoot":"","sources":["../../src/clients/TorrentClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,MAAM,MAAM,aAAa,CAAC;AAGjC,IAAI,YAA2B,CAAC;AAsBhC,SAAS,yBAAyB;IACjC,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,YAAY,EAAE,GACzE,gBAAgB,EAAE,CAAC;IACpB,IAAI,cAAc,EAAE,CAAC;QACpB,YAAY,GAAG,IAAI,QAAQ,EAAE,CAAC;IAC/B,CAAC;SAAM,IAAI,cAAc,EAAE,CAAC;QAC3B,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,CAAC;SAAM,IAAI,kBAAkB,EAAE,CAAC;QAC/B,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACzB,YAAY,GAAG,IAAI,MAAM,EAAE,CAAC;IAC7B,CAAC;AACF,CAAC;AAED,MAAM,UAAU,SAAS;IACxB,IAAI,CAAC,YAAY,EAAE,CAAC;QACnB,yBAAyB,EAAE,CAAC;IAC7B,CAAC;IACD,OAAO,YAAY,CAAC;AACrB,CAAC"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { InjectionResult, TORRENT_TAG } from "../constants.js";
|
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";
|
@@ -43,7 +43,7 @@ export default class Transmission {
|
|
43
43
|
}
|
44
44
|
}
|
45
45
|
catch (e) {
|
46
|
-
if (e instanceof
|
46
|
+
if (e instanceof SyntaxError) {
|
47
47
|
logger.error({
|
48
48
|
label: Label.TRANSMISSION,
|
49
49
|
message: `Transmission returned non-JSON response`,
|
@@ -72,12 +72,12 @@ export default class Transmission {
|
|
72
72
|
throw new CrossSeedError(`Failed to reach Transmission at ${transmissionRpcUrl}`);
|
73
73
|
}
|
74
74
|
}
|
75
|
-
async checkOriginalTorrent(
|
75
|
+
async checkOriginalTorrent(data, onlyCompleted) {
|
76
76
|
let queryResponse;
|
77
77
|
try {
|
78
78
|
queryResponse = await this.request("torrent-get", {
|
79
79
|
fields: ["downloadDir", "percentDone"],
|
80
|
-
ids: [
|
80
|
+
ids: [data.infoHash],
|
81
81
|
});
|
82
82
|
}
|
83
83
|
catch (e) {
|
@@ -87,29 +87,49 @@ export default class Transmission {
|
|
87
87
|
return resultOfErr(InjectionResult.FAILURE);
|
88
88
|
}
|
89
89
|
const [{ downloadDir, percentDone }] = queryResponse.torrents;
|
90
|
-
if (percentDone < 1) {
|
90
|
+
if (onlyCompleted && percentDone < 1) {
|
91
91
|
return resultOfErr(InjectionResult.TORRENT_NOT_COMPLETE);
|
92
92
|
}
|
93
93
|
return resultOf({ downloadDir });
|
94
94
|
}
|
95
|
-
async getDownloadDir(
|
96
|
-
const result = await this.checkOriginalTorrent(
|
95
|
+
async getDownloadDir(meta, options) {
|
96
|
+
const result = await this.checkOriginalTorrent(meta, options.onlyCompleted);
|
97
97
|
return result
|
98
98
|
.mapOk((r) => r.downloadDir)
|
99
99
|
.mapErr((err) => (err === "FAILURE" ? "UNKNOWN_ERROR" : err));
|
100
100
|
}
|
101
|
+
async isTorrentComplete(infoHash) {
|
102
|
+
const queryResponse = await this.request("torrent-get", {
|
103
|
+
fields: ["percentDone"],
|
104
|
+
ids: [infoHash],
|
105
|
+
});
|
106
|
+
if (queryResponse.torrents.length === 0) {
|
107
|
+
return resultOfErr("NOT_FOUND");
|
108
|
+
}
|
109
|
+
const [{ percentDone }] = queryResponse.torrents;
|
110
|
+
return resultOf(percentDone === 1);
|
111
|
+
}
|
112
|
+
async recheckTorrent(infoHash) {
|
113
|
+
// Pause first as it may resume after recheck automatically
|
114
|
+
await this.request("torrent-stop", {
|
115
|
+
ids: [infoHash],
|
116
|
+
});
|
117
|
+
await this.request("torrent-verify", {
|
118
|
+
ids: [infoHash],
|
119
|
+
});
|
120
|
+
}
|
101
121
|
async inject(newTorrent, searchee, decision, path) {
|
102
122
|
let downloadDir;
|
103
123
|
if (path) {
|
104
124
|
downloadDir = path;
|
105
125
|
}
|
106
126
|
else {
|
107
|
-
const result = await this.getDownloadDir(searchee);
|
127
|
+
const result = await this.getDownloadDir(searchee, { onlyCompleted: true });
|
108
128
|
if (result.isErr()) {
|
109
129
|
return InjectionResult.FAILURE;
|
110
130
|
}
|
111
131
|
else {
|
112
|
-
downloadDir = result.
|
132
|
+
downloadDir = result.unwrap();
|
113
133
|
}
|
114
134
|
}
|
115
135
|
let addResponse;
|
@@ -117,7 +137,7 @@ export default class Transmission {
|
|
117
137
|
addResponse = await this.request("torrent-add", {
|
118
138
|
"download-dir": downloadDir,
|
119
139
|
metainfo: newTorrent.encode().toString("base64"),
|
120
|
-
paused: shouldRecheck(decision),
|
140
|
+
paused: shouldRecheck(searchee, decision),
|
121
141
|
labels: [TORRENT_TAG],
|
122
142
|
});
|
123
143
|
}
|
@@ -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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"}
|