cross-seed 4.4.3 → 5.0.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.
- package/dist/action.js +60 -8
- package/dist/action.js.map +1 -1
- package/dist/clients/QBittorrent.js +26 -8
- package/dist/clients/QBittorrent.js.map +1 -1
- package/dist/clients/RTorrent.js +48 -32
- package/dist/clients/RTorrent.js.map +1 -1
- package/dist/clients/TorrentClient.js.map +1 -1
- package/dist/clients/Transmission.js +23 -9
- package/dist/clients/Transmission.js.map +1 -1
- package/dist/cmd.js +15 -2
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +38 -0
- package/dist/config.template.cjs.map +1 -1
- package/dist/config.template.docker.cjs +38 -0
- package/dist/config.template.docker.cjs.map +1 -1
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +13 -1
- package/dist/constants.js.map +1 -1
- package/dist/dataFiles.js +27 -0
- package/dist/dataFiles.js.map +1 -0
- package/dist/decide.js +30 -9
- package/dist/decide.js.map +1 -1
- package/dist/migrations/02-timestamps.js +6 -6
- package/dist/migrations/02-timestamps.js.map +1 -1
- package/dist/pipeline.js +48 -23
- package/dist/pipeline.js.map +1 -1
- package/dist/preFilter.js +14 -6
- package/dist/preFilter.js.map +1 -1
- package/dist/runtimeConfig.js +0 -4
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/searchee.js +29 -2
- package/dist/searchee.js.map +1 -1
- package/dist/server.js +4 -5
- package/dist/server.js.map +1 -1
- package/dist/startup.js +8 -1
- package/dist/startup.js.map +1 -1
- package/dist/torrent.js +2 -3
- package/dist/torrent.js.map +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"config.template.docker.cjs","sourceRoot":"","sources":["../src/config.template.docker.cjs"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,wBAAwB;;AAExB,MAAM,CAAC,OAAO,GAAG;IAChB;;;OAGG;IACH,KAAK,EAAE,EAAE;IAET;;;;;OAKG;IACH,OAAO,EAAE,EAAE;IAEX;;;;;;;OAOG;IACH,UAAU,EAAE,WAAW;IAEvB;;;;OAIG;IACH,SAAS,EAAE,cAAc;IAEzB;;OAEG;IACH,eAAe,EAAE,KAAK;IAEtB;;;;;OAKG;IACH,gBAAgB,EAAE,KAAK;IAEvB;;;OAGG;IACH,kBAAkB,EAAE,IAAI;IAExB;;;;;;;OAOG;IACH,YAAY,EAAE,SAAS;IAEvB;;;;;;;OAOG;IACH,mBAAmB,EAAE,SAAS;IAE9B;;;OAGG;IACH,MAAM,EAAE,MAAM;IAEd;;;;OAIG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;;OAKG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;;;OAMG;IACH,kBAAkB,EAAE,SAAS;IAE7B;;;;;OAKG;IACH,mBAAmB,EAAE,KAAK;IAE1B;;;;OAIG;IACH,sBAAsB,EAAE,SAAS;IAEjC;;OAEG;IACH,IAAI,EAAE,IAAI;IAEV;;;OAGG;IACH,IAAI,EAAE,SAAS;IAEf;;;;;;;OAOG;IACH,UAAU,EAAE,SAAS;IAErB;;;;;;;;OAQG;IACH,aAAa,EAAE,SAAS;CACxB,CAAC"}
|
1
|
+
{"version":3,"file":"config.template.docker.cjs","sourceRoot":"","sources":["../src/config.template.docker.cjs"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,wBAAwB;;AAExB,MAAM,CAAC,OAAO,GAAG;IAChB;;;OAGG;IACH,KAAK,EAAE,EAAE;IAET;;;;;OAKG;IACH,OAAO,EAAE,EAAE;IAEX;;;OAGG;IACH,QAAQ,EAAE,EAAE;IAEZ;;;;OAIG;IACH,SAAS,EAAE,SAAS;IAEpB;;;OAGG;IACH,YAAY,EAAE,SAAS;IAEvB;;;OAGG;IACH,OAAO,EAAE,SAAS;IAElB;;;;OAIG;IACH,QAAQ,EAAE,SAAS;IAEnB;;;OAGG;IACH,WAAW,EAAE,KAAK;IAElB;;;;OAIG;IACH,YAAY,EAAE,CAAC;IAEf;;;;;;;OAOG;IACH,UAAU,EAAE,WAAW;IAEvB;;;;OAIG;IACH,SAAS,EAAE,cAAc;IAEzB;;OAEG;IACH,eAAe,EAAE,KAAK;IAEtB;;;;;OAKG;IACH,gBAAgB,EAAE,KAAK;IAEvB;;;OAGG;IACH,kBAAkB,EAAE,IAAI;IAExB;;;;;;;OAOG;IACH,YAAY,EAAE,SAAS;IAEvB;;;;;;;OAOG;IACH,mBAAmB,EAAE,SAAS;IAE9B;;;OAGG;IACH,MAAM,EAAE,MAAM;IAEd;;;;OAIG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;;OAKG;IACH,cAAc,EAAE,SAAS;IAEzB;;;;;;OAMG;IACH,kBAAkB,EAAE,SAAS;IAE7B;;;;;OAKG;IACH,mBAAmB,EAAE,KAAK;IAE1B;;;;OAIG;IACH,sBAAsB,EAAE,SAAS;IAEjC;;OAEG;IACH,IAAI,EAAE,IAAI;IAEV;;;OAGG;IACH,IAAI,EAAE,SAAS;IAEf;;;;;;;OAOG;IACH,UAAU,EAAE,SAAS;IAErB;;;;;;;;OAQG;IACH,aAAa,EAAE,SAAS;CACxB,CAAC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"configuration.js","sourceRoot":"","sources":["../src/configuration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAGpC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,cAAc,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAqClD,MAAM,UAAU,MAAM;IACrB,OAAO,CACN,OAAO,CAAC,GAAG,CAAC,UAAU;QACtB,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC;YAC7D,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAC7D,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY;IAC3B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC9B,KAAK,GAAG,KAAK,EACb,MAAM,GAAG,KAAK,GACQ;IACtB,YAAY,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAC7B,oBAAoB,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CACjD,CAAC;IACF,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE;QAC/B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO;KACP;IACD,YAAY,CAAC,IAAI,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IAClC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE;QACtC,cAAc,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;KACjC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,CAAC,CAAC;IAEpD,IAAI;QACH,OAAO,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACpE;IAAC,OAAO,CAAC,EAAE;QACX,IAAI,CAAC,CAAC,IAAI,KAAK,sBAAsB;YAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,EAAE,CAAC;KACV;AACF,CAAC"}
|
package/dist/constants.js
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
export const EP_REGEX = /^(?<title>.+)[. ](?<season>S\d+)(?<episode>E\d+)/i;
|
2
2
|
export const SEASON_REGEX = /^(?<title>.+)[. ](?<season>S\d+)(?:\s?-\s?(?<seasonmax>S?\d+))?(?!E\d+)/i;
|
3
3
|
export const MOVIE_REGEX = /^(?<title>.+)[. ][[(]?(?<year>\d{4})[)\]]?(?![pi])/i;
|
4
|
-
export const
|
4
|
+
export const VIDEO_EXTENSIONS = [".mkv", ".mp4", ".avi"];
|
5
|
+
export const DATA_EXTENSIONS = [".mkv", ".avi", ".mp4", ".ts", ".flac", ".mp3"];
|
5
6
|
export const TORRENT_CACHE_FOLDER = "torrent_cache";
|
6
7
|
export var Action;
|
7
8
|
(function (Action) {
|
@@ -22,6 +23,7 @@ export var SaveResult;
|
|
22
23
|
export var Decision;
|
23
24
|
(function (Decision) {
|
24
25
|
Decision["MATCH"] = "MATCH";
|
26
|
+
Decision["MATCH_SIZE_ONLY"] = "MATCH_SIZE_ONLY";
|
25
27
|
Decision["SIZE_MISMATCH"] = "SIZE_MISMATCH";
|
26
28
|
Decision["NO_DOWNLOAD_LINK"] = "NO_DOWNLOAD_LINK";
|
27
29
|
Decision["DOWNLOAD_FAILED"] = "DOWNLOAD_FAILED";
|
@@ -29,4 +31,14 @@ export var Decision;
|
|
29
31
|
Decision["INFO_HASH_ALREADY_EXISTS"] = "INFO_HASH_ALREADY_EXISTS";
|
30
32
|
Decision["FILE_TREE_MISMATCH"] = "FILE_TREE_MISMATCH";
|
31
33
|
})(Decision = Decision || (Decision = {}));
|
34
|
+
export var MatchMode;
|
35
|
+
(function (MatchMode) {
|
36
|
+
MatchMode["SAFE"] = "safe";
|
37
|
+
MatchMode["RISKY"] = "risky";
|
38
|
+
})(MatchMode = MatchMode || (MatchMode = {}));
|
39
|
+
export var LinkType;
|
40
|
+
(function (LinkType) {
|
41
|
+
LinkType["SYMLINK"] = "symlink";
|
42
|
+
LinkType["HARDLINK"] = "hardlink";
|
43
|
+
})(LinkType = LinkType || (LinkType = {}));
|
32
44
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,mDAAmD,CAAC;AAC5E,MAAM,CAAC,MAAM,YAAY,GACxB,0EAA0E,CAAC;AAC5E,MAAM,CAAC,MAAM,WAAW,GACvB,qDAAqD,CAAC;AAEvD,MAAM,CAAC,MAAM,
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,mDAAmD,CAAC;AAC5E,MAAM,CAAC,MAAM,YAAY,GACxB,0EAA0E,CAAC;AAC5E,MAAM,CAAC,MAAM,WAAW,GACvB,qDAAqD,CAAC;AAEvD,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,QASX;AATD,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;AAC1C,CAAC,EATW,QAAQ,GAAR,QAAQ,KAAR,QAAQ,QASnB;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"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
import { readdirSync, statSync } from "fs";
|
2
|
+
import { extname, join } from "path";
|
3
|
+
import { DATA_EXTENSIONS } from "./constants.js";
|
4
|
+
import { getRuntimeConfig } from "./runtimeConfig.js";
|
5
|
+
export function findPotentialNestedRoots(root, depth, isDirHint) {
|
6
|
+
const isDir = isDirHint !== undefined ? isDirHint : statSync(root).isDirectory();
|
7
|
+
// if depth is 0, don't look at children
|
8
|
+
if (depth > 0 && isDir) {
|
9
|
+
const directChildren = readdirSync(root, { withFileTypes: true });
|
10
|
+
const allDescendants = directChildren.flatMap((dirent) => findPotentialNestedRoots(join(root, dirent.name), depth - 1, dirent.isDirectory()));
|
11
|
+
return [root, ...allDescendants];
|
12
|
+
}
|
13
|
+
else if (DATA_EXTENSIONS.includes(extname(root)) &&
|
14
|
+
!root.includes("sample")) {
|
15
|
+
return [root];
|
16
|
+
}
|
17
|
+
else {
|
18
|
+
return [];
|
19
|
+
}
|
20
|
+
}
|
21
|
+
export function findSearcheesFromAllDataDirs() {
|
22
|
+
const { dataDirs, maxDataDepth } = getRuntimeConfig();
|
23
|
+
return dataDirs.flatMap((dataDir) => readdirSync(dataDir)
|
24
|
+
.map((dirent) => join(dataDir, dirent))
|
25
|
+
.flatMap((path) => findPotentialNestedRoots(path, maxDataDepth)));
|
26
|
+
}
|
27
|
+
//# sourceMappingURL=dataFiles.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"dataFiles.js","sourceRoot":"","sources":["../src/dataFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,UAAU,wBAAwB,CACvC,IAAY,EACZ,KAAa,EACb,SAAmB;IAEnB,MAAM,KAAK,GACV,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAEpE,wCAAwC;IACxC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,EAAE;QACvB,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CACxD,wBAAwB,CACvB,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,EACvB,KAAK,GAAG,CAAC,EACT,MAAM,CAAC,WAAW,EAAE,CACpB,CACD,CAAC;QACF,OAAO,CAAC,IAAI,EAAE,GAAG,cAAc,CAAC,CAAC;KACjC;SAAM,IACN,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EACvB;QACD,OAAO,CAAC,IAAI,CAAC,CAAC;KACd;SAAM;QACN,OAAO,EAAE,CAAC;KACV;AACF,CAAC;AAED,MAAM,UAAU,4BAA4B;IAC3C,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACtD,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CACnC,WAAW,CAAC,OAAO,CAAC;SAClB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACtC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CACjE,CAAC;AACH,CAAC"}
|
package/dist/decide.js
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
import { existsSync, writeFileSync } from "fs";
|
1
|
+
import { existsSync, statSync, writeFileSync } from "fs";
|
2
2
|
import parseTorrent from "parse-torrent";
|
3
3
|
import path from "path";
|
4
4
|
import { appDir } from "./configuration.js";
|
5
|
-
import { Decision, TORRENT_CACHE_FOLDER } from "./constants.js";
|
5
|
+
import { MatchMode, Decision, TORRENT_CACHE_FOLDER } from "./constants.js";
|
6
6
|
import { db } from "./db.js";
|
7
7
|
import { Label, logger } from "./logger.js";
|
8
8
|
import { getRuntimeConfig } from "./runtimeConfig.js";
|
@@ -53,6 +53,12 @@ export function compareFileTrees(candidate, searchee) {
|
|
53
53
|
};
|
54
54
|
return getFiles(candidate).every((elOfA) => searchee.files.some((elOfB) => cmp(elOfA, elOfB)));
|
55
55
|
}
|
56
|
+
export function compareFileTreesIgnoringNames(candidate, searchee) {
|
57
|
+
const cmp = (candidate, searchee) => {
|
58
|
+
return searchee.length === candidate.length;
|
59
|
+
};
|
60
|
+
return candidate.files.every((elOfA) => searchee.files.some((elOfB) => cmp(elOfA, elOfB)));
|
61
|
+
}
|
56
62
|
function sizeDoesMatch(resultSize, searchee) {
|
57
63
|
const { fuzzySizeThreshold } = getRuntimeConfig();
|
58
64
|
const { length } = searchee;
|
@@ -61,6 +67,7 @@ function sizeDoesMatch(resultSize, searchee) {
|
|
61
67
|
return resultSize >= lowerBound && resultSize <= upperBound;
|
62
68
|
}
|
63
69
|
async function assessCandidateHelper({ link, size }, searchee, hashesToExclude) {
|
70
|
+
const { matchMode } = getRuntimeConfig();
|
64
71
|
if (size != null && !sizeDoesMatch(size, searchee)) {
|
65
72
|
return { decision: Decision.SIZE_MISMATCH };
|
66
73
|
}
|
@@ -76,10 +83,19 @@ async function assessCandidateHelper({ link, size }, searchee, hashesToExclude)
|
|
76
83
|
if (hashesToExclude.includes(candidateMeta.infoHash)) {
|
77
84
|
return { decision: Decision.INFO_HASH_ALREADY_EXISTS };
|
78
85
|
}
|
79
|
-
|
86
|
+
const perfectMatch = compareFileTrees(candidateMeta, searchee);
|
87
|
+
if (perfectMatch) {
|
88
|
+
return { decision: Decision.MATCH, metafile: candidateMeta };
|
89
|
+
}
|
90
|
+
if (!searchee.path) {
|
80
91
|
return { decision: Decision.FILE_TREE_MISMATCH };
|
81
92
|
}
|
82
|
-
|
93
|
+
if (matchMode == MatchMode.RISKY &&
|
94
|
+
!statSync(searchee.path).isDirectory() &&
|
95
|
+
compareFileTreesIgnoringNames(candidateMeta, searchee)) {
|
96
|
+
return { decision: Decision.MATCH_SIZE_ONLY, metafile: candidateMeta };
|
97
|
+
}
|
98
|
+
return { decision: Decision.FILE_TREE_MISMATCH };
|
83
99
|
}
|
84
100
|
function existsInTorrentCache(infoHash) {
|
85
101
|
return existsSync(path.join(appDir(), TORRENT_CACHE_FOLDER, `${infoHash}.cached.torrent`));
|
@@ -92,7 +108,8 @@ function cacheTorrentFile(meta) {
|
|
92
108
|
}
|
93
109
|
async function assessAndSaveResults(result, searchee, guid, infoHashesToExclude) {
|
94
110
|
const assessment = await assessCandidateHelper(result, searchee, infoHashesToExclude);
|
95
|
-
if (assessment.decision === Decision.MATCH
|
111
|
+
if (assessment.decision === Decision.MATCH ||
|
112
|
+
assessment.decision === Decision.MATCH_SIZE_ONLY) {
|
96
113
|
cacheTorrentFile(assessment.metafile);
|
97
114
|
}
|
98
115
|
await db.transaction(async (trx) => {
|
@@ -105,7 +122,8 @@ async function assessAndSaveResults(result, searchee, guid, infoHashesToExclude)
|
|
105
122
|
searchee_id: id,
|
106
123
|
guid: guid,
|
107
124
|
decision: assessment.decision,
|
108
|
-
info_hash: assessment.decision === Decision.MATCH
|
125
|
+
info_hash: assessment.decision === Decision.MATCH ||
|
126
|
+
assessment.decision === Decision.MATCH_SIZE_ONLY
|
109
127
|
? assessment.metafile.infoHash
|
110
128
|
: null,
|
111
129
|
last_seen: now,
|
@@ -133,7 +151,8 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
|
|
133
151
|
assessment = await assessAndSaveResults(candidate, searchee, guid, infoHashesToExclude);
|
134
152
|
logReason(assessment.decision, false);
|
135
153
|
}
|
136
|
-
else if (cacheEntry.decision === Decision.MATCH
|
154
|
+
else if ((cacheEntry.decision === Decision.MATCH ||
|
155
|
+
cacheEntry.decision === Decision.MATCH_SIZE_ONLY) &&
|
137
156
|
infoHashesToExclude.includes(cacheEntry.infoHash)) {
|
138
157
|
// has been added since the last run
|
139
158
|
assessment = { decision: Decision.INFO_HASH_ALREADY_EXISTS };
|
@@ -141,7 +160,8 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
|
|
141
160
|
.where({ id: cacheEntry.id })
|
142
161
|
.update({ decision: Decision.INFO_HASH_ALREADY_EXISTS });
|
143
162
|
}
|
144
|
-
else if (cacheEntry.decision === Decision.MATCH
|
163
|
+
else if ((cacheEntry.decision === Decision.MATCH ||
|
164
|
+
cacheEntry.decision === Decision.MATCH_SIZE_ONLY) &&
|
145
165
|
existsInTorrentCache(cacheEntry.infoHash)) {
|
146
166
|
// cached match
|
147
167
|
assessment = {
|
@@ -149,7 +169,8 @@ async function assessCandidateCaching(candidate, searchee, infoHashesToExclude)
|
|
149
169
|
metafile: await getCachedTorrentFile(cacheEntry.infoHash),
|
150
170
|
};
|
151
171
|
}
|
152
|
-
else if (cacheEntry.decision === Decision.MATCH
|
172
|
+
else if (cacheEntry.decision === Decision.MATCH ||
|
173
|
+
cacheEntry.decision === Decision.MATCH_SIZE_ONLY) {
|
153
174
|
assessment = await assessAndSaveResults(candidate, searchee, guid, infoHashesToExclude);
|
154
175
|
logReason(assessment.decision, false);
|
155
176
|
}
|
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,aAAa,EAAE,MAAM,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"decide.js","sourceRoot":"","sources":["../src/decide.ts"],"names":[],"mappings":"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"}
|
@@ -17,13 +17,13 @@ async function backfill(knex) {
|
|
17
17
|
})))
|
18
18
|
.onConflict("url")
|
19
19
|
.merge(["active", "apikey"]);
|
20
|
+
const timestampRows = await knex
|
21
|
+
.select("searchee.id as searchee_id", "indexer.id as indexer_id", "searchee.first_searched as first_searched", "searchee.last_searched as last_searched")
|
22
|
+
.from("searchee")
|
23
|
+
// @ts-expect-error crossJoin supports string
|
24
|
+
.crossJoin("indexer");
|
25
|
+
await knex.batchInsert("timestamp", timestampRows, 100);
|
20
26
|
}
|
21
|
-
const timestampRows = await knex
|
22
|
-
.select("searchee.id as searchee_id", "indexer.id as indexer_id", "searchee.first_searched as first_searched", "searchee.last_searched as last_searched")
|
23
|
-
.from("searchee")
|
24
|
-
// @ts-expect-error crossJoin supports string
|
25
|
-
.crossJoin("indexer");
|
26
|
-
await knex.batchInsert("timestamp", timestampRows, 100);
|
27
27
|
}
|
28
28
|
async function up(knex) {
|
29
29
|
await knex.schema.createTable("indexer", (table) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"02-timestamps.js","sourceRoot":"","sources":["../../src/migrations/02-timestamps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,SAAS,WAAW,CAAC,GAAiB;IACrC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAe;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,IAAI,CAAC,SAAS,CAAC;aACnB,MAAM,CACN,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC;YACrB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;YACtB,MAAM,EAAE,IAAI;SACZ,CAAC,CAAC,CACH;aACA,UAAU,CAAC,KAAK,CAAC;aACjB,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;
|
1
|
+
{"version":3,"file":"02-timestamps.js","sourceRoot":"","sources":["../../src/migrations/02-timestamps.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,SAAS,WAAW,CAAC,GAAiB;IACrC,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC;AAClC,CAAC;AAED,SAAS,SAAS,CAAC,GAAW;IAC7B,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAe;IACtC,MAAM,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEvC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,MAAM,IAAI,CAAC,SAAS,CAAC;aACnB,MAAM,CACN,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACrB,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC;YACrB,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC;YACtB,MAAM,EAAE,IAAI;SACZ,CAAC,CAAC,CACH;aACA,UAAU,CAAC,KAAK,CAAC;aACjB,KAAK,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE9B,MAAM,aAAa,GAAG,MAAM,IAAI;aAC9B,MAAM,CACN,4BAA4B,EAC5B,0BAA0B,EAC1B,2CAA2C,EAC3C,yCAAyC,CACzC;aACA,IAAI,CAAC,UAAU,CAAC;YACjB,6CAA6C;aAC5C,SAAS,CAAC,SAAS,CAAC,CAAC;QACvB,MAAM,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;KACxD;AACF,CAAC;AAED,KAAK,UAAU,EAAE,CAAC,IAAe;IAChC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;QAClD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7B,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAChC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAe;IAClC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC"}
|
package/dist/pipeline.js
CHANGED
@@ -4,18 +4,19 @@ import { zip } from "lodash-es";
|
|
4
4
|
import ms from "ms";
|
5
5
|
import { performAction, performActions } from "./action.js";
|
6
6
|
import { Decision, InjectionResult, SaveResult, } from "./constants.js";
|
7
|
+
import { findPotentialNestedRoots, findSearcheesFromAllDataDirs, } from "./dataFiles.js";
|
7
8
|
import { db } from "./db.js";
|
8
9
|
import { assessCandidate } from "./decide.js";
|
9
10
|
import { IndexerStatus, updateIndexerStatus, updateSearchTimestamps, } from "./indexers.js";
|
10
11
|
import { Label, logger } from "./logger.js";
|
11
12
|
import { filterByContent, filterDupes, filterTimestamps } from "./preFilter.js";
|
12
13
|
import { sendResultsNotification } from "./pushNotifier.js";
|
13
|
-
import {
|
14
|
-
import { createSearcheeFromMetafile, createSearcheeFromTorrentFile, } from "./searchee.js";
|
14
|
+
import { getRuntimeConfig } from "./runtimeConfig.js";
|
15
|
+
import { createSearcheeFromMetafile, createSearcheeFromPath, createSearcheeFromTorrentFile, } from "./searchee.js";
|
15
16
|
import { getInfoHashesToExclude, getTorrentByCriteria, getTorrentByFuzzyName, indexNewTorrents, loadTorrentDirLight, } from "./torrent.js";
|
16
17
|
import { queryRssFeeds, searchTorznab } from "./torznab.js";
|
17
18
|
import { filterAsync, stripExtension } from "./utils.js";
|
18
|
-
async function findOnOtherSites(searchee, hashesToExclude
|
19
|
+
async function findOnOtherSites(searchee, hashesToExclude) {
|
19
20
|
const assessEach = async (result) => ({
|
20
21
|
assessment: await assessCandidate(result, searchee, hashesToExclude),
|
21
22
|
tracker: result.tracker,
|
@@ -52,8 +53,9 @@ async function findOnOtherSites(searchee, hashesToExclude, nonceOptions = EmptyN
|
|
52
53
|
});
|
53
54
|
await updateSearchTimestamps(searchee.name, Array.from(notRateLimited));
|
54
55
|
await updateIndexerStatus(IndexerStatus.RATE_LIMITED, Date.now() + ms("1 hour"), Array.from(rateLimited));
|
55
|
-
const matches = assessed.filter((e) => e.assessment.decision === Decision.MATCH
|
56
|
-
|
56
|
+
const matches = assessed.filter((e) => e.assessment.decision === Decision.MATCH ||
|
57
|
+
e.assessment.decision === Decision.MATCH_SIZE_ONLY);
|
58
|
+
const actionResults = await performActions(searchee, matches);
|
57
59
|
if (!actionResults.includes(InjectionResult.TORRENT_NOT_COMPLETE)) {
|
58
60
|
const zipped = zip(matches.map((m) => m.assessment), matches.map((m) => m.tracker), actionResults);
|
59
61
|
sendResultsNotification(searchee, zipped, Label.SEARCH);
|
@@ -74,12 +76,24 @@ async function findMatchesBatch(samples, hashesToExclude) {
|
|
74
76
|
}
|
75
77
|
return totalFound;
|
76
78
|
}
|
77
|
-
export async function searchForLocalTorrentByCriteria(criteria
|
78
|
-
const
|
79
|
+
export async function searchForLocalTorrentByCriteria(criteria) {
|
80
|
+
const { maxDataDepth } = getRuntimeConfig();
|
81
|
+
let searchees;
|
82
|
+
if (criteria.path) {
|
83
|
+
const searcheeResults = await Promise.all(findPotentialNestedRoots(criteria.path, maxDataDepth).map(createSearcheeFromPath));
|
84
|
+
searchees = searcheeResults.map((t) => t.unwrapOrThrow());
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
searchees = [await getTorrentByCriteria(criteria)];
|
88
|
+
}
|
79
89
|
const hashesToExclude = await getInfoHashesToExclude();
|
80
|
-
|
81
|
-
|
82
|
-
|
90
|
+
let matches = 0;
|
91
|
+
for (let i = 0; i < searchees.length; i++) {
|
92
|
+
if (!filterByContent(searchees[i]))
|
93
|
+
return null;
|
94
|
+
matches += await findOnOtherSites(searchees[i], hashesToExclude);
|
95
|
+
}
|
96
|
+
return matches;
|
83
97
|
}
|
84
98
|
export async function checkNewCandidateMatch(candidate) {
|
85
99
|
const meta = await getTorrentByFuzzyName(candidate.name);
|
@@ -100,38 +114,49 @@ export async function checkNewCandidateMatch(candidate) {
|
|
100
114
|
.onConflict("name")
|
101
115
|
.ignore();
|
102
116
|
const assessment = await assessCandidate(candidate, searchee, hashesToExclude);
|
103
|
-
if (assessment.decision !== Decision.MATCH
|
117
|
+
if (assessment.decision !== Decision.MATCH &&
|
118
|
+
assessment.decision !== Decision.MATCH_SIZE_ONLY)
|
104
119
|
return false;
|
105
|
-
const result = await performAction(assessment.metafile, searchee, candidate.tracker
|
120
|
+
const result = await performAction(assessment.metafile, assessment.decision, searchee, candidate.tracker);
|
106
121
|
await sendResultsNotification(searchee, [[assessment, candidate.tracker, result]], Label.REVERSE_LOOKUP);
|
107
122
|
return result === InjectionResult.SUCCESS || result === SaveResult.SAVED;
|
108
123
|
}
|
109
124
|
async function findSearchableTorrents() {
|
110
|
-
const { torrents } = getRuntimeConfig();
|
111
|
-
let
|
125
|
+
const { torrents, dataDirs, torrentDir } = getRuntimeConfig();
|
126
|
+
let allSearchees = [];
|
112
127
|
if (Array.isArray(torrents)) {
|
113
|
-
const searcheeResults = await Promise.all(torrents.map(createSearcheeFromTorrentFile)
|
114
|
-
|
128
|
+
const searcheeResults = await Promise.all(torrents.map(createSearcheeFromTorrentFile) //also create searchee from path
|
129
|
+
);
|
130
|
+
allSearchees = searcheeResults
|
115
131
|
.filter((t) => t.isOk())
|
116
132
|
.map((t) => t.unwrapOrThrow());
|
117
133
|
}
|
118
134
|
else {
|
119
|
-
|
135
|
+
if (Array.isArray(dataDirs)) {
|
136
|
+
const searcheeResults = await Promise.all(findSearcheesFromAllDataDirs().map(createSearcheeFromPath));
|
137
|
+
allSearchees.push(...searcheeResults
|
138
|
+
.filter((t) => t.isOk())
|
139
|
+
.map((t) => t.unwrapOrThrow()));
|
140
|
+
}
|
141
|
+
if (typeof torrentDir === "string") {
|
142
|
+
allSearchees.push(...(await loadTorrentDirLight()));
|
143
|
+
}
|
120
144
|
}
|
121
|
-
const hashesToExclude =
|
122
|
-
|
123
|
-
.filter(Boolean);
|
124
|
-
const filteredTorrents = await filterAsync(filterDupes(parsedTorrents).filter(filterByContent), filterTimestamps);
|
145
|
+
const hashesToExclude = allSearchees.map((t) => t.infoHash).filter(Boolean);
|
146
|
+
const filteredTorrents = await filterAsync(filterDupes(allSearchees).filter(filterByContent), filterTimestamps);
|
125
147
|
logger.info({
|
126
148
|
label: Label.SEARCH,
|
127
|
-
message: `Found ${
|
149
|
+
message: `Found ${allSearchees.length} torrents, ${filteredTorrents.length} suitable to search for matches`,
|
128
150
|
});
|
129
151
|
return { samples: filteredTorrents, hashesToExclude };
|
130
152
|
}
|
131
153
|
export async function main() {
|
132
|
-
const { outputDir } = getRuntimeConfig();
|
154
|
+
const { outputDir, linkDir } = getRuntimeConfig();
|
133
155
|
const { samples, hashesToExclude } = await findSearchableTorrents();
|
134
156
|
fs.mkdirSync(outputDir, { recursive: true });
|
157
|
+
if (linkDir) {
|
158
|
+
fs.mkdirSync(linkDir, { recursive: true });
|
159
|
+
}
|
135
160
|
const totalFound = await findMatchesBatch(samples, hashesToExclude);
|
136
161
|
logger.info({
|
137
162
|
label: Label.SEARCH,
|
package/dist/pipeline.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAEN,QAAQ,EACR,eAAe,EACf,UAAU,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAoB,MAAM,aAAa,CAAC;AAChE,OAAO,EACN,aAAa,EACb,mBAAmB,EACnB,sBAAsB,GACtB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/preFilter.js
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
import { uniqBy } from "lodash-es";
|
2
1
|
import ms from "ms";
|
3
|
-
import
|
4
|
-
import { EP_REGEX,
|
2
|
+
import { extname } from "path";
|
3
|
+
import { EP_REGEX, VIDEO_EXTENSIONS } from "./constants.js";
|
5
4
|
import { db } from "./db.js";
|
6
5
|
import { Label, logger } from "./logger.js";
|
7
6
|
import { getRuntimeConfig } from "./runtimeConfig.js";
|
8
7
|
import { humanReadable, nMsAgo } from "./utils.js";
|
9
|
-
const extensionsWithDots = EXTENSIONS.map((e) => `.${e}`);
|
10
8
|
export function filterByContent(searchee) {
|
11
9
|
const { includeEpisodes, includeNonVideos } = getRuntimeConfig();
|
12
10
|
function logReason(reason) {
|
@@ -20,7 +18,7 @@ export function filterByContent(searchee) {
|
|
20
18
|
logReason("it is a single episode");
|
21
19
|
return false;
|
22
20
|
}
|
23
|
-
const allFilesAreVideos = searchee.files.every((file) =>
|
21
|
+
const allFilesAreVideos = searchee.files.every((file) => VIDEO_EXTENSIONS.includes(extname(file.name)));
|
24
22
|
if (!includeNonVideos && !allFilesAreVideos) {
|
25
23
|
logReason("not all files are videos");
|
26
24
|
return false;
|
@@ -28,7 +26,17 @@ export function filterByContent(searchee) {
|
|
28
26
|
return true;
|
29
27
|
}
|
30
28
|
export function filterDupes(searchees) {
|
31
|
-
const
|
29
|
+
const duplicateMap = searchees.reduce((acc, cur) => {
|
30
|
+
const entry = acc.get(cur.name);
|
31
|
+
if (entry === undefined) {
|
32
|
+
acc.set(cur.name, cur);
|
33
|
+
}
|
34
|
+
else if (cur.infoHash && !entry.infoHash) {
|
35
|
+
acc.set(cur.name, cur);
|
36
|
+
}
|
37
|
+
return acc;
|
38
|
+
}, new Map());
|
39
|
+
const filtered = Array.from(duplicateMap.values());
|
32
40
|
const numDupes = searchees.length - filtered.length;
|
33
41
|
if (numDupes > 0) {
|
34
42
|
logger.verbose({
|
package/dist/preFilter.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../src/preFilter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"preFilter.js","sourceRoot":"","sources":["../src/preFilter.ts"],"names":[],"mappings":"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"}
|
package/dist/runtimeConfig.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../src/runtimeConfig.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"runtimeConfig.js","sourceRoot":"","sources":["../src/runtimeConfig.ts"],"names":[],"mappings":"AAgCA,IAAI,aAA4B,CAAC;AAEjC,MAAM,UAAU,gBAAgB,CAAC,SAAwB;IACxD,aAAa,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC/B,OAAO,aAAa,CAAC;AACtB,CAAC"}
|
package/dist/searchee.js
CHANGED
@@ -1,8 +1,26 @@
|
|
1
|
+
import { readdirSync, statSync } from "fs";
|
1
2
|
import { sortBy } from "lodash-es";
|
2
|
-
import { basename, sep as osSpecificPathSeparator } from "path";
|
3
|
-
import { parseTorrentFromFilename } from "./torrent.js";
|
3
|
+
import { basename, join, relative, sep as osSpecificPathSeparator } from "path";
|
4
4
|
import { logger } from "./logger.js";
|
5
5
|
import { resultOf, resultOfErr } from "./Result.js";
|
6
|
+
import { parseTorrentFromFilename } from "./torrent.js";
|
7
|
+
function getFileNamesFromRootRec(root, isDirHint) {
|
8
|
+
const isDir = isDirHint !== undefined ? isDirHint : statSync(root).isDirectory();
|
9
|
+
if (isDir) {
|
10
|
+
return readdirSync(root, { withFileTypes: true }).flatMap((dirent) => getFileNamesFromRootRec(join(root, dirent.name), dirent.isDirectory()));
|
11
|
+
}
|
12
|
+
else {
|
13
|
+
return [root];
|
14
|
+
}
|
15
|
+
}
|
16
|
+
function getFilesFromDataRoot(rootPath) {
|
17
|
+
const parentDir = join(rootPath, "..");
|
18
|
+
return getFileNamesFromRootRec(rootPath).map((file) => ({
|
19
|
+
path: relative(parentDir, file),
|
20
|
+
name: basename(file),
|
21
|
+
length: statSync(file).size,
|
22
|
+
}));
|
23
|
+
}
|
6
24
|
export function getFiles(meta) {
|
7
25
|
if (!meta.info.files) {
|
8
26
|
return [
|
@@ -47,4 +65,13 @@ export async function createSearcheeFromTorrentFile(filepath) {
|
|
47
65
|
return resultOfErr(e);
|
48
66
|
}
|
49
67
|
}
|
68
|
+
export async function createSearcheeFromPath(filepath) {
|
69
|
+
const totalLength = getFilesFromDataRoot(filepath).reduce((runningTotal, file) => runningTotal + file.length, 0);
|
70
|
+
return resultOf({
|
71
|
+
files: getFilesFromDataRoot(filepath),
|
72
|
+
path: filepath,
|
73
|
+
name: basename(filepath),
|
74
|
+
length: totalLength,
|
75
|
+
});
|
76
|
+
}
|
50
77
|
//# sourceMappingURL=searchee.js.map
|
package/dist/searchee.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"searchee.js","sourceRoot":"","sources":["../src/searchee.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,uBAAuB,EAAE,MAAM,MAAM,CAAC;
|
1
|
+
{"version":3,"file":"searchee.js","sourceRoot":"","sources":["../src/searchee.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
@@ -53,10 +53,9 @@ async function search(req, res) {
|
|
53
53
|
res.end(e.message);
|
54
54
|
return;
|
55
55
|
}
|
56
|
-
const criteria = pick(data, ["infoHash", "name"]);
|
57
|
-
|
58
|
-
|
59
|
-
const message = "A name or info hash must be provided";
|
56
|
+
const criteria = pick(data, ["infoHash", "name", "path"]);
|
57
|
+
if (!("infoHash" in criteria || "name" in criteria || "path" in criteria)) {
|
58
|
+
const message = "A name, info hash, or path must be provided";
|
60
59
|
logger.error({ label: Label.SERVER, message });
|
61
60
|
res.writeHead(400);
|
62
61
|
res.end(message);
|
@@ -73,7 +72,7 @@ async function search(req, res) {
|
|
73
72
|
try {
|
74
73
|
let numFound = null;
|
75
74
|
if (criteria) {
|
76
|
-
numFound = await searchForLocalTorrentByCriteria(criteria
|
75
|
+
numFound = await searchForLocalTorrentByCriteria(criteria);
|
77
76
|
}
|
78
77
|
if (numFound === null) {
|
79
78
|
logger.info({
|