cross-seed 5.9.0 → 5.9.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/dist/clients/Deluge.js +64 -36
- package/dist/clients/Deluge.js.map +1 -1
- package/dist/constants.js +2 -0
- package/dist/constants.js.map +1 -1
- package/dist/decide.js +19 -2
- package/dist/decide.js.map +1 -1
- package/package.json +1 -1
package/dist/clients/Deluge.js
CHANGED
@@ -47,7 +47,7 @@ export default class Deluge {
|
|
47
47
|
logger.warn("Deluge WebUI disconnected from daemon...attempting to reconnect.");
|
48
48
|
const webuiHostList = await this.call("web.get_hosts", [], 0);
|
49
49
|
const connectResponse = await this.call("web.connect", [webuiHostList.result[0][0]], 0);
|
50
|
-
if (connectResponse) {
|
50
|
+
if (!connectResponse.error) {
|
51
51
|
logger.info("Deluge WebUI connected to the daemon.");
|
52
52
|
}
|
53
53
|
else {
|
@@ -65,14 +65,16 @@ export default class Deluge {
|
|
65
65
|
if (this.delugeCookie)
|
66
66
|
headers.set("Cookie", this.delugeCookie);
|
67
67
|
let response, json;
|
68
|
+
const id = Math.floor(Math.random() * 0x7fffffff);
|
68
69
|
try {
|
69
70
|
response = await fetch(href, {
|
70
71
|
body: JSON.stringify({
|
71
|
-
|
72
|
-
|
72
|
+
method,
|
73
|
+
params,
|
74
|
+
id,
|
73
75
|
}),
|
74
76
|
method: "POST",
|
75
|
-
headers
|
77
|
+
headers,
|
76
78
|
});
|
77
79
|
}
|
78
80
|
catch (networkError) {
|
@@ -87,7 +89,7 @@ export default class Deluge {
|
|
87
89
|
catch (jsonParseError) {
|
88
90
|
throw new Error(`Deluge method ${method} response was non-JSON ${jsonParseError}`);
|
89
91
|
}
|
90
|
-
if (json
|
92
|
+
if (json.error?.code === DelugeErrorCode.NO_AUTH && retries > 0) {
|
91
93
|
this.delugeCookie = null;
|
92
94
|
await this.authenticate();
|
93
95
|
if (this.delugeCookie) {
|
@@ -113,8 +115,10 @@ export default class Deluge {
|
|
113
115
|
* returns true if successful.
|
114
116
|
*/
|
115
117
|
async labelEnabled() {
|
116
|
-
const
|
117
|
-
return
|
118
|
+
const enabledPlugins = await this.call("core.get_enabled_plugins", []);
|
119
|
+
return enabledPlugins.error
|
120
|
+
? false
|
121
|
+
: enabledPlugins.result.includes("Label");
|
118
122
|
}
|
119
123
|
/**
|
120
124
|
* if Label plugin is loaded, adds (if necessary)
|
@@ -126,7 +130,7 @@ export default class Deluge {
|
|
126
130
|
infoHash,
|
127
131
|
label,
|
128
132
|
]);
|
129
|
-
if (setResult
|
133
|
+
if (setResult.error?.code === DelugeErrorCode.RPC_FAIL) {
|
130
134
|
await this.call("label.add", [label]);
|
131
135
|
await this.call("label.set_torrent", [infoHash, label]);
|
132
136
|
}
|
@@ -142,17 +146,19 @@ export default class Deluge {
|
|
142
146
|
if (searchee.infoHash) {
|
143
147
|
torrentInfo = await this.getTorrentInfo(searchee);
|
144
148
|
if (!torrentInfo.complete) {
|
145
|
-
if (torrentInfo.save_path == "missing" &&
|
146
|
-
!path &&
|
147
|
-
!searchee.path) {
|
148
|
-
return InjectionResult.FAILURE;
|
149
|
-
}
|
150
149
|
return InjectionResult.TORRENT_NOT_COMPLETE;
|
151
150
|
}
|
152
151
|
}
|
152
|
+
if (!path && (!searchee.infoHash || !torrentInfo)) {
|
153
|
+
logger.debug({
|
154
|
+
label: Label.DELUGE,
|
155
|
+
message: `Injection failure: ${newTorrent.name} was missing critical data.`,
|
156
|
+
});
|
157
|
+
return InjectionResult.FAILURE;
|
158
|
+
}
|
153
159
|
const params = this.formatData(`${newTorrent.getFileSystemSafeName()}.cross-seed.torrent`, newTorrent.encode().toString("base64"), path ? path : torrentInfo.save_path, !!searchee.infoHash);
|
154
160
|
const addResult = await this.call("core.add_torrent_file", params);
|
155
|
-
if (addResult
|
161
|
+
if (addResult.result) {
|
156
162
|
const { dataCategory } = getRuntimeConfig();
|
157
163
|
await this.setLabel(newTorrent.infoHash, searchee.path
|
158
164
|
? dataCategory
|
@@ -165,24 +171,40 @@ export default class Deluge {
|
|
165
171
|
: this.delugeLabel);
|
166
172
|
return InjectionResult.SUCCESS;
|
167
173
|
}
|
168
|
-
else if (addResult
|
174
|
+
else if (addResult.error.message.includes("already")) {
|
169
175
|
return InjectionResult.ALREADY_EXISTS;
|
170
176
|
}
|
171
|
-
else if (addResult
|
177
|
+
else if (addResult.error.message) {
|
172
178
|
logger.debug({
|
173
179
|
label: Label.DELUGE,
|
174
180
|
message: `Injection failed: ${addResult.error.message}`,
|
175
181
|
});
|
176
182
|
return InjectionResult.FAILURE;
|
177
183
|
}
|
184
|
+
else {
|
185
|
+
logger.debug({
|
186
|
+
label: Label.DELUGE,
|
187
|
+
message: `Unknown injection failure: ${newTorrent.name} (${newTorrent.infoHash})`,
|
188
|
+
});
|
189
|
+
return InjectionResult.FAILURE;
|
190
|
+
}
|
178
191
|
}
|
179
192
|
catch (injectResult) {
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
193
|
+
if (injectResult.includes("label.set_torrent")) {
|
194
|
+
logger.warning({
|
195
|
+
label: Label.DELUGE,
|
196
|
+
message: `Labeling failure: ${newTorrent.name} (${newTorrent.infoHash})`,
|
197
|
+
});
|
198
|
+
return InjectionResult.SUCCESS;
|
199
|
+
}
|
200
|
+
else {
|
201
|
+
logger.error({
|
202
|
+
label: Label.DELUGE,
|
203
|
+
message: `Injection failed: ${injectResult}`,
|
204
|
+
});
|
205
|
+
logger.debug(injectResult);
|
206
|
+
return InjectionResult.FAILURE;
|
207
|
+
}
|
186
208
|
}
|
187
209
|
}
|
188
210
|
/**
|
@@ -203,29 +225,32 @@ export default class Deluge {
|
|
203
225
|
* returns information needed to complete/validate injection
|
204
226
|
*/
|
205
227
|
async getTorrentInfo(searchee) {
|
228
|
+
if (!searchee.infoHash) {
|
229
|
+
throw new Error("Can't search a torrent without a infoHash");
|
230
|
+
}
|
231
|
+
let torrent;
|
206
232
|
try {
|
207
|
-
let torrentLabel = undefined;
|
208
233
|
const params = [
|
209
234
|
["state", "progress", "save_path", "label"],
|
210
235
|
{ hash: searchee.infoHash },
|
211
236
|
];
|
212
237
|
const response = await this.call("web.update_ui", params);
|
213
|
-
if (response
|
214
|
-
|
238
|
+
if (response.result.torrents) {
|
239
|
+
torrent = response.result.torrents?.[searchee.infoHash];
|
215
240
|
}
|
216
|
-
|
217
|
-
response
|
218
|
-
?.length != 0) {
|
219
|
-
torrentLabel =
|
220
|
-
response?.result?.torrents?.[searchee.infoHash]?.label;
|
241
|
+
else {
|
242
|
+
throw new Error("Client returned unexpected response (object missing)");
|
221
243
|
}
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
244
|
+
if (torrent === undefined) {
|
245
|
+
throw new Error(`Torrent not found in client (${searchee.infoHash})`);
|
246
|
+
}
|
247
|
+
const completedTorrent = torrent.state === "Seeding" || torrent.progress === 100;
|
248
|
+
const torrentLabel = this.isLabelEnabled && torrent.label.length != 0
|
249
|
+
? torrent.label
|
250
|
+
: undefined;
|
226
251
|
return {
|
227
252
|
complete: completedTorrent,
|
228
|
-
save_path:
|
253
|
+
save_path: torrent.save_path,
|
229
254
|
label: torrentLabel,
|
230
255
|
};
|
231
256
|
}
|
@@ -235,7 +260,10 @@ export default class Deluge {
|
|
235
260
|
message: `Failed to fetch torrent data: ${searchee.name} - (${searchee.infoHash})`,
|
236
261
|
});
|
237
262
|
logger.debug(e);
|
238
|
-
|
263
|
+
// @ts-expect-error needs es2022 target (tsconfig)
|
264
|
+
throw new Error("web.update_ui: failed to fetch data from client", {
|
265
|
+
cause: e,
|
266
|
+
});
|
239
267
|
}
|
240
268
|
}
|
241
269
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Deluge.js","sourceRoot":"","sources":["../../src/clients/Deluge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAY,MAAM,YAAY,CAAC;AAStD,IAAK,eAMJ;AAND,WAAK,eAAe;IACnB,2DAAW,CAAA;IACX,iEAAc,CAAA;IACd,6DAAY,CAAA;IACZ,6DAAY,CAAA;IACZ,6DAAY,CAAA;AACb,CAAC,EANI,eAAe,KAAf,eAAe,QAMnB;
|
1
|
+
{"version":3,"file":"Deluge.js","sourceRoot":"","sources":["../../src/clients/Deluge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,EAAE,OAAO,EAAY,MAAM,YAAY,CAAC;AAStD,IAAK,eAMJ;AAND,WAAK,eAAe;IACnB,2DAAW,CAAA;IACX,iEAAc,CAAA;IACd,6DAAY,CAAA;IACZ,6DAAY,CAAA;IACZ,6DAAY,CAAA;AACb,CAAC,EANI,eAAe,KAAf,eAAe,QAMnB;AAmBD,MAAM,CAAC,OAAO,OAAO,MAAM;IAA3B;QACS,iBAAY,GAAkB,IAAI,CAAC;QACnC,gBAAW,GAAG,YAAY,CAAC;IAqUpC,CAAC;IAlUA;;OAEG;IACH,KAAK,CAAC,cAAc;QACnB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACzB,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,yBAAyB,CACnD,YAAY,CACZ,CAAC,aAAa,CACd,IAAI,cAAc,CAAC,sCAAsC,CAAC,CAC1D,CAAC;QACF,IAAI,CAAC,QAAQ,EAAE;YACd,MAAM,IAAI,cAAc,CACvB,6FAA6F,CAC7F,CAAC;SACF;QACD,IAAI;YACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CACnC,YAAY,EACZ,CAAC,QAAQ,CAAC,EACV,CAAC,CACD,CAAC;YACF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;gBACzB,MAAM,IAAI,cAAc,CACvB,+CAA+C,IAAI,EAAE,CACrD,CAAC;aACF;SACD;QAAC,OAAO,YAAY,EAAE;YACtB,MAAM,IAAI,cAAc,CAAC,YAAY,CAAC,CAAC;SACvC;QACD,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CACxC,eAAe,EACf,EAAE,EACF,CAAC,CACD,CAAC;QAEF,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YAC9B,MAAM,CAAC,IAAI,CACV,kEAAkE,CAClE,CAAC;YACF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,IAAI,CACpC,eAAe,EACf,EAAE,EACF,CAAC,CACD,CAAC;YACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,IAAI,CACtC,aAAa,EACb,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5B,CAAC,CACD,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE;gBAC3B,MAAM,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;aACrD;iBAAM;gBACN,MAAM,IAAI,cAAc,CACvB,iFAAiF,CACjF,CAAC;aACF;SACD;IACF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,IAAI,CACjB,MAAc,EACd,MAAiB,EACjB,OAAO,GAAG,CAAC;QAEX,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,GACb,yBAAyB,CAAC,YAAY,CAAC,CAAC,aAAa,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;QAEhE,IAAI,QAAkB,EAAE,IAA4B,CAAC;QACrD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC;QAClD,IAAI;YACH,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE;gBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACpB,MAAM;oBACN,MAAM;oBACN,EAAE;iBACF,CAAC;gBACF,MAAM,EAAE,MAAM;gBACd,OAAO;aACP,CAAC,CAAC;SACH;QAAC,OAAO,YAAY,EAAE;YACtB,kDAAkD;YAClD,MAAM,IAAI,KAAK,CAAC,kCAAkC,IAAI,EAAE,EAAE;gBACzD,KAAK,EAAE,YAAY;aACnB,CAAC,CAAC;SACH;QACD,IAAI;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC7B;QAAC,OAAO,cAAc,EAAE;YACxB,MAAM,IAAI,KAAK,CACd,iBAAiB,MAAM,0BAA0B,cAAc,EAAE,CACjE,CAAC;SACF;QACD,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,KAAK,eAAe,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,EAAE;YAChE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,YAAY,EAAE;gBACtB,OAAO,IAAI,CAAC,IAAI,CAAa,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;aAChD;iBAAM;gBACN,MAAM,IAAI,KAAK,CACd,uDAAuD,CACvD,CAAC;aACF;SACD;QACD,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,OAAgB;QAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC9B,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAC5D;IACF,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,YAAY;QACzB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,IAAI,CACrC,0BAA0B,EAC1B,EAAE,CACF,CAAC;QACF,OAAO,cAAc,CAAC,KAAK;YAC1B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,QAAQ,CAAC,QAAgB,EAAE,KAAa;QACrD,IAAI,IAAI,CAAC,cAAc,EAAE;YACxB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAAO,mBAAmB,EAAE;gBAC5D,QAAQ;gBACR,KAAK;aACL,CAAC,CAAC;YACH,IAAI,SAAS,CAAC,KAAK,EAAE,IAAI,KAAK,eAAe,CAAC,QAAQ,EAAE;gBACvD,MAAM,IAAI,CAAC,IAAI,CAAO,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC5C,MAAM,IAAI,CAAC,IAAI,CAAO,mBAAmB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;aAC9D;SACD;IACF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACX,UAAoB,EACpB,QAAkB,EAClB,IAAa;QAEb,IAAI;YACH,IAAI,WAAwB,CAAC;YAC7B,MAAM,EAAE,mBAAmB,EAAE,GAAG,gBAAgB,EAAE,CAAC;YAEnD,IAAI,QAAQ,CAAC,QAAQ,EAAE;gBACtB,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAClD,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE;oBAC1B,OAAO,eAAe,CAAC,oBAAoB,CAAC;iBAC5C;aACD;YACD,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,EAAE;gBAClD,MAAM,CAAC,KAAK,CAAC;oBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,OAAO,EAAE,sBAAsB,UAAU,CAAC,IAAI,6BAA6B;iBAC3E,CAAC,CAAC;gBACH,OAAO,eAAe,CAAC,OAAO,CAAC;aAC/B;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAC7B,GAAG,UAAU,CAAC,qBAAqB,EAAE,qBAAqB,EAC1D,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACtC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,EACnC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CACnB,CAAC;YACF,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,IAAI,CAChC,uBAAuB,EACvB,MAAM,CACN,CAAC;YACF,IAAI,SAAS,CAAC,MAAM,EAAE;gBACrB,MAAM,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,QAAQ,CAClB,UAAU,CAAC,QAAQ,EACnB,QAAQ,CAAC,IAAI;oBACZ,CAAC,CAAC,YAAY;oBACd,CAAC,CAAC,WAAW,CAAC,KAAK;wBACnB,CAAC,CAAC,mBAAmB;4BACpB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC;gCAC1C,CAAC,CAAC,WAAW,CAAC,KAAK;gCACnB,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,aAAa;4BACpC,CAAC,CAAC,WAAW,CAAC,KAAK;wBACpB,CAAC,CAAC,IAAI,CAAC,WAAW,CACnB,CAAC;gBACF,OAAO,eAAe,CAAC,OAAO,CAAC;aAC/B;iBAAM,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBACvD,OAAO,eAAe,CAAC,cAAc,CAAC;aACtC;iBAAM,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;gBACnC,MAAM,CAAC,KAAK,CAAC;oBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,OAAO,EAAE,qBAAqB,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE;iBACvD,CAAC,CAAC;gBACH,OAAO,eAAe,CAAC,OAAO,CAAC;aAC/B;iBAAM;gBACN,MAAM,CAAC,KAAK,CAAC;oBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,OAAO,EAAE,8BAA8B,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,GAAG;iBACjF,CAAC,CAAC;gBACH,OAAO,eAAe,CAAC,OAAO,CAAC;aAC/B;SACD;QAAC,OAAO,YAAY,EAAE;YACtB,IAAI,YAAY,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE;gBAC/C,MAAM,CAAC,OAAO,CAAC;oBACd,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,OAAO,EAAE,qBAAqB,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,QAAQ,GAAG;iBACxE,CAAC,CAAC;gBACH,OAAO,eAAe,CAAC,OAAO,CAAC;aAC/B;iBAAM;gBACN,MAAM,CAAC,KAAK,CAAC;oBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;oBACnB,OAAO,EAAE,qBAAqB,YAAY,EAAE;iBAC5C,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC3B,OAAO,eAAe,CAAC,OAAO,CAAC;aAC/B;SACD;IACF,CAAC;IAED;;OAEG;IACK,UAAU,CACjB,QAAgB,EAChB,QAAgB,EAChB,IAAY,EACZ,SAAkB;QAElB,OAAO;YACN,QAAQ;YACR,QAAQ;YACR;gBACC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,WAAW;gBAC/D,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC,WAAW;gBAC5D,iBAAiB,EAAE,IAAI;aACvB;SACD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,QAAkB;QAC9C,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;SAC7D;QAED,IAAI,OAAoB,CAAC;QACzB,IAAI;YACH,MAAM,MAAM,GAAG;gBACd,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC;gBAC3C,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,EAAE;aAC3B,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC/B,eAAe,EACf,MAAM,CACN,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC7B,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACxD;iBAAM;gBACN,MAAM,IAAI,KAAK,CACd,sDAAsD,CACtD,CAAC;aACF;YACD,IAAI,OAAO,KAAK,SAAS,EAAE;gBAC1B,MAAM,IAAI,KAAK,CACd,gCAAgC,QAAQ,CAAC,QAAQ,GAAG,CACpD,CAAC;aACF;YAED,MAAM,gBAAgB,GACrB,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC;YACzD,MAAM,YAAY,GACjB,IAAI,CAAC,cAAc,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;gBAC/C,CAAC,CAAC,OAAO,CAAC,KAAK;gBACf,CAAC,CAAC,SAAS,CAAC;YAEd,OAAO;gBACN,QAAQ,EAAE,gBAAgB;gBAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE,YAAY;aACnB,CAAC;SACF;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,CAAC,KAAK,CAAC;gBACZ,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,OAAO,EAAE,iCAAiC,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,QAAQ,GAAG;aAClF,CAAC,CAAC;YACH,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChB,kDAAkD;YAClD,MAAM,IAAI,KAAK,CAAC,iDAAiD,EAAE;gBAClE,KAAK,EAAE,CAAC;aACR,CAAC,CAAC;SACH;IACF,CAAC;CACD"}
|
package/dist/constants.js
CHANGED
@@ -7,6 +7,7 @@ export const USER_AGENT = `CrossSeed/${PROGRAM_VERSION}`;
|
|
7
7
|
export const EP_REGEX = /^(?<title>.+?)[_.\s-]+(?:(?<season>S\d+)?[_.\s]?(?<episode>E\d+(?:[\s-]?E?\d+)?(?![ip]))(?!\d+[ip])|(?<date>(?<year>\d{4})[_.\s-](?<month>\d{2})[_.\s-](?<day>\d{2})))/i;
|
8
8
|
export const SEASON_REGEX = /^(?<title>.+?)[_.\s-]+(?<season>S\d+)(?:[_.\s-]*?(?<seasonmax>S?\d+))?(?=[_.\s](?!E\d+))/i;
|
9
9
|
export const MOVIE_REGEX = /^(?<title>.+?)[_.\s][[(]?(?<year>\d{4})[)\]]?(?![pi])/i;
|
10
|
+
export const RELEASE_GROUP_REGEX = /(?<=-)[\w ]+(?=(?:\.\w{1,5})?$)/i;
|
10
11
|
export const VIDEO_EXTENSIONS = [".mkv", ".mp4", ".avi"];
|
11
12
|
export const DATA_EXTENSIONS = [".mkv", ".avi", ".mp4", ".ts", ".flac", ".mp3"];
|
12
13
|
export const TORRENT_CACHE_FOLDER = "torrent_cache";
|
@@ -36,6 +37,7 @@ export var Decision;
|
|
36
37
|
Decision["RATE_LIMITED"] = "RATE_LIMITED";
|
37
38
|
Decision["INFO_HASH_ALREADY_EXISTS"] = "INFO_HASH_ALREADY_EXISTS";
|
38
39
|
Decision["FILE_TREE_MISMATCH"] = "FILE_TREE_MISMATCH";
|
40
|
+
Decision["RELEASE_GROUP_MISMATCH"] = "RELEASE_GROUP_MISMATCH";
|
39
41
|
})(Decision = Decision || (Decision = {}));
|
40
42
|
export var MatchMode;
|
41
43
|
(function (MatchMode) {
|
package/dist/constants.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,eAAe,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GACpB,yKAAyK,CAAC;AAC3K,MAAM,CAAC,MAAM,YAAY,GACxB,2FAA2F,CAAC;AAC7F,MAAM,CAAC,MAAM,WAAW,GACvB,wDAAwD,CAAC;
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,YAAY,GAAG,cAAc,CAAC,IAAI,CAAC;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,OAAO,CAAC;AACtD,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,eAAe,EAAE,CAAC;AAEzD,MAAM,CAAC,MAAM,QAAQ,GACpB,yKAAyK,CAAC;AAC3K,MAAM,CAAC,MAAM,YAAY,GACxB,2FAA2F,CAAC;AAC7F,MAAM,CAAC,MAAM,WAAW,GACvB,wDAAwD,CAAC;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,kCAAkC,CAAC;AAEtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AAEhF,MAAM,CAAC,MAAM,oBAAoB,GAAG,eAAe,CAAC;AAEpD,MAAM,CAAN,IAAY,MAGX;AAHD,WAAY,MAAM;IACjB,uBAAa,CAAA;IACb,2BAAiB,CAAA;AAClB,CAAC,EAHW,MAAM,GAAN,MAAM,KAAN,MAAM,QAGjB;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IAC1B,uCAAoB,CAAA;IACpB,sCAAmB,CAAA;IACnB,oDAAiC,CAAA;IACjC,gEAA6C,CAAA;AAC9C,CAAC,EALW,eAAe,GAAf,eAAe,KAAf,eAAe,QAK1B;AAED,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACrB,6BAAe,CAAA;AAChB,CAAC,EAFW,UAAU,GAAV,UAAU,KAAV,UAAU,QAErB;AAID,MAAM,CAAN,IAAY,QAUX;AAVD,WAAY,QAAQ;IACnB,2BAAe,CAAA;IACf,+CAAmC,CAAA;IACnC,2CAA+B,CAAA;IAC/B,iDAAqC,CAAA;IACrC,+CAAmC,CAAA;IACnC,yCAA6B,CAAA;IAC7B,iEAAqD,CAAA;IACrD,qDAAyC,CAAA;IACzC,6DAAiD,CAAA;AAClD,CAAC,EAVW,QAAQ,GAAR,QAAQ,KAAR,QAAQ,QAUnB;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACpB,0BAAa,CAAA;IACb,4BAAe,CAAA;AAChB,CAAC,EAHW,SAAS,GAAT,SAAS,KAAT,SAAS,QAGpB;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IACnB,+BAAmB,CAAA;IACnB,iCAAqB,CAAA;AACtB,CAAC,EAHW,QAAQ,GAAR,QAAQ,KAAR,QAAQ,QAGnB"}
|
package/dist/decide.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { existsSync, statSync, writeFileSync } from "fs";
|
2
2
|
import path from "path";
|
3
3
|
import { appDir } from "./configuration.js";
|
4
|
-
import { Decision, MatchMode, TORRENT_CACHE_FOLDER } from "./constants.js";
|
4
|
+
import { Decision, MatchMode, RELEASE_GROUP_REGEX, TORRENT_CACHE_FOLDER, } from "./constants.js";
|
5
5
|
import { db } from "./db.js";
|
6
6
|
import { Label, logger } from "./logger.js";
|
7
7
|
import { getRuntimeConfig } from "./runtimeConfig.js";
|
@@ -15,6 +15,8 @@ const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
|
|
15
15
|
}
|
16
16
|
let reason;
|
17
17
|
switch (decision) {
|
18
|
+
case Decision.MATCH_SIZE_ONLY:
|
19
|
+
return;
|
18
20
|
case Decision.MATCH:
|
19
21
|
return;
|
20
22
|
case Decision.SIZE_MISMATCH:
|
@@ -35,6 +37,9 @@ const createReasonLogger = (Title, tracker, name) => (decision, cached) => {
|
|
35
37
|
case Decision.FILE_TREE_MISMATCH:
|
36
38
|
reason = "it has a different file tree";
|
37
39
|
break;
|
40
|
+
case Decision.RELEASE_GROUP_MISMATCH:
|
41
|
+
reason = "it has a different release group";
|
42
|
+
break;
|
38
43
|
default:
|
39
44
|
reason = decision;
|
40
45
|
break;
|
@@ -64,11 +69,23 @@ function sizeDoesMatch(resultSize, searchee) {
|
|
64
69
|
const upperBound = length + fuzzySizeThreshold * length;
|
65
70
|
return resultSize >= lowerBound && resultSize <= upperBound;
|
66
71
|
}
|
67
|
-
|
72
|
+
function releaseGroupDoesMatch(searcheeName, candidateName, matchMode) {
|
73
|
+
const searcheeMatch = searcheeName.match(RELEASE_GROUP_REGEX);
|
74
|
+
const candidateMatch = candidateName.match(RELEASE_GROUP_REGEX);
|
75
|
+
// if we are unsure, pass in risky mode but fail in safe mode
|
76
|
+
if (!searcheeMatch || !candidateMatch) {
|
77
|
+
return matchMode === MatchMode.RISKY;
|
78
|
+
}
|
79
|
+
return searcheeMatch[0].toLowerCase() === candidateMatch[0].toLowerCase();
|
80
|
+
}
|
81
|
+
async function assessCandidateHelper({ link, size, name }, searchee, hashesToExclude) {
|
68
82
|
const { matchMode } = getRuntimeConfig();
|
69
83
|
if (size && !sizeDoesMatch(size, searchee)) {
|
70
84
|
return { decision: Decision.SIZE_MISMATCH };
|
71
85
|
}
|
86
|
+
if (!releaseGroupDoesMatch(searchee.name, name, matchMode)) {
|
87
|
+
return { decision: Decision.RELEASE_GROUP_MISMATCH };
|
88
|
+
}
|
72
89
|
if (!link)
|
73
90
|
return { decision: Decision.NO_DOWNLOAD_LINK };
|
74
91
|
const result = await parseTorrentFromURL(link);
|
package/dist/decide.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
|