cross-seed 6.0.0-4 → 6.0.0-40
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 +78 -55
- package/dist/clients/Deluge.js.map +1 -1
- package/dist/clients/QBittorrent.js +98 -67
- package/dist/clients/QBittorrent.js.map +1 -1
- package/dist/clients/RTorrent.js +39 -12
- package/dist/clients/RTorrent.js.map +1 -1
- package/dist/clients/TorrentClient.js +1 -1
- package/dist/clients/TorrentClient.js.map +1 -1
- package/dist/clients/Transmission.js +31 -11
- package/dist/clients/Transmission.js.map +1 -1
- package/dist/cmd.js +37 -23
- package/dist/cmd.js.map +1 -1
- package/dist/config.template.cjs +88 -52
- package/dist/config.template.cjs.map +1 -1
- package/dist/configSchema.js +102 -14
- package/dist/configSchema.js.map +1 -1
- package/dist/configuration.js +4 -1
- package/dist/configuration.js.map +1 -1
- package/dist/constants.js +114 -6
- package/dist/constants.js.map +1 -1
- package/dist/dataFiles.js +4 -5
- package/dist/dataFiles.js.map +1 -1
- package/dist/db.js +2 -1
- package/dist/db.js.map +1 -1
- package/dist/decide.js +282 -167
- package/dist/decide.js.map +1 -1
- package/dist/diff.js +13 -3
- package/dist/diff.js.map +1 -1
- package/dist/errors.js +5 -2
- package/dist/errors.js.map +1 -1
- package/dist/indexers.js +96 -16
- package/dist/indexers.js.map +1 -1
- package/dist/inject.js +410 -0
- package/dist/inject.js.map +1 -0
- package/dist/jobs.js +9 -2
- package/dist/jobs.js.map +1 -1
- package/dist/logger.js +29 -9
- package/dist/logger.js.map +1 -1
- package/dist/migrations/00-initialSchema.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/07-limits.js +12 -0
- package/dist/migrations/07-limits.js.map +1 -0
- package/dist/migrations/migrations.js +13 -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 +225 -116
- package/dist/pipeline.js.map +1 -1
- package/dist/preFilter.js +130 -52
- package/dist/preFilter.js.map +1 -1
- package/dist/pushNotifier.js +7 -5
- package/dist/pushNotifier.js.map +1 -1
- package/dist/runtimeConfig.js.map +1 -1
- package/dist/searchee.js +200 -19
- package/dist/searchee.js.map +1 -1
- package/dist/server.js +79 -32
- package/dist/server.js.map +1 -1
- package/dist/startup.js +17 -6
- package/dist/startup.js.map +1 -1
- package/dist/torrent.js +117 -51
- package/dist/torrent.js.map +1 -1
- package/dist/torznab.js +374 -146
- package/dist/torznab.js.map +1 -1
- package/dist/utils.js +252 -33
- package/dist/utils.js.map +1 -1
- package/package.json +10 -5
package/dist/arr.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"arr.js","sourceRoot":"","sources":["../src/arr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAU,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EACN,iBAAiB,EACjB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,iBAAiB,GACjB,MAAM,YAAY,CAAC;AASpB,MAAM,UAAU,WAAW,CAC1B,CAA0B,EAC1B,CAA0B;IAE1B,OAAO,CACN,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,MAAM;QACvB,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,MAAM;QACvB,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,MAAM;QACvB,CAAC,EAAE,QAAQ,KAAK,CAAC,EAAE,QAAQ,CAC3B,CAAC;AACH,CAAC;AAmBD,MAAM,CAAC,KAAK,UAAU,cAAc;IACnC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAE9C,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,GAAU,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,cAAc,CACvB,cAAc,GAAG,6BAA6B,CAC9C,CAAC;YACH,CAAC;YACD,MAAM,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,GAAU,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACtD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,cAAc,CACvB,cAAc,GAAG,6BAA6B,CAC9C,CAAC;YACH,CAAC;YACD,MAAM,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;AACF,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAa,EAAE,WAAmB;IACjE,MAAM,YAAY,GAAG,MAAM,cAAc,CAEtC,KAAK,EAAE,MAAM,CAAC,CAAC;IAElB,IAAI,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC;QACzB,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;QAC9C,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,CAAC;YAC/B,MAAM,IAAI,cAAc,CACvB,uCAAuC,WAAW,SAAS,KAAK,EAAE,CAClE,CAAC;QACH,CAAC;IACF,CAAC;SAAM,CAAC;QACP,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,CAAC;QACvC,MAAM,IAAI,cAAc,CACvB,qBAAqB,WAAW,OAAO,KAAK,EAAE,EAC9C;YACC,KAAK,EACJ,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,KAAK,CAAC,KAAK;gBACpD,CAAC,CAAC,KAAK,CAAC,KAAK;gBACb,CAAC,CAAC,KAAK;SACT,CACD,CAAC;IACH,CAAC;AACF,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACzC,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC/C,IAAI,cAAc,EAAE,CAAC;QACpB,OAAO,0BAA0B,cAAc,EAAE,CAAC;IACnD,CAAC;SAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACX,CAAC;AACF,CAAC;AAED,KAAK,UAAU,cAAc,CAC5B,KAAa,EACb,YAAoB,EACpB,MAAM,GAAG,IAAI,eAAe,EAAE;IAE9B,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAExC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACpC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACJ,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;YAC7C,OAAO,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;IACJ,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACvB,IACC,YAAY,CAAC,IAAI,KAAK,YAAY;YAClC,YAAY,CAAC,IAAI,KAAK,cAAc,EACnC,CAAC;YACF,OAAO,WAAW,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAC7D,OAAO,WAAW,CACjB,IAAI,KAAK,CACR,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,IAAI,iBAAiB,EAAE,CAChE,CACD,CAAC;IACH,CAAC;IACD,IAAI,CAAC;QACJ,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,QAAQ,CAAC,YAA4B,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3C,OAAO,WAAW,CACjB,IAAI,KAAK,CACR,8BAA8B,oBAAoB,CAAC,YAAY,CAAC,EAAE,CAClE,CACD,CAAC;IACH,CAAC;AACF,CAAC;AAED,KAAK,UAAU,eAAe,CAC7B,KAAa,EACb,KAAa;IAEb,OAAO,MAAM,cAAc,CAC1B,KAAK,EACL,eAAe,EACf,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAC9B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAqB;IACnD,OAAO,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,CACpB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,QAAQ,CAClD,MAAM,CAAC,WAAW,EAAE,CACpB,CACD;SACA,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,OAAO,IAAI,KAAK,CAAC;QAC7B,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IACpD,CAAC,CAAC;SACD,IAAI,CAAC,GAAG,CAAC,CAAC;AACb,CAAC;AAED,SAAS,iBAAiB,CACzB,WAAwB,EACxB,UAAkB,EAClB,KAA+C,EAC/C,KAAa;IAEb,IAAI,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC;gBACd,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,qBAAqB,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oDAAoD;aACxI,CAAC,CAAC;YACH,OAAO;QACR,CAAC;QACD,MAAM,CAAC,KAAK,CAAC;YACZ,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,4BAA4B,KAAK,CAAC,MAAM,CAChD,UAAU,CACV,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG;SACjE,CAAC,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACP,MAAM,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC;YACd,KAAK,EAAE,KAAK;YACZ,OAAO,EAAE,mBAAmB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,WAAW,EAAE;SAC5E,CAAC,CAAC;IACJ,CAAC;AACF,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAoB;IACpD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,SAAS,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC,MAAM,CAAC;QACtB,KAAK,SAAS,CAAC,OAAO;YACrB,OAAO,MAAM,CAAC;QACf,KAAK,SAAS,CAAC,KAAK;YACnB,OAAO,MAAM,CAAC;QACf,KAAK,SAAS,CAAC,KAAK,CAAC;QACrB,KAAK,SAAS,CAAC,KAAK;YACnB,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QAC/B;YACC,OAAO,EAAE,CAAC;IACZ,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACxC,aAAqB,EACrB,SAAoB;IAEpB,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GACV,SAAS,KAAK,SAAS,CAAC,KAAK;QAC5B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,iBAAiB,CAAE,CAAC,MAAO,CAAC,KAAK;QACvD,CAAC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC;IACxD,IAAI,KAAK,GAAG,IAAI,KAAK,CACpB,oBAAoB,KAAK,iBAAiB,SAAS,CAAC,WAAW,EAAE,EAAE,CACnE,CAAC;IACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,GACT,SAAS,KAAK,SAAS,CAAC,KAAK;YAC7B,gBAAgB,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC;YACzC,CAAC,CAAC,GAAG,KAAK,SAAS,CAAC,iCAAiC;YACrD,CAAC,CAAC,KAAK,CAAC;QACV,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YACpB,KAAK,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,SAAS;QACV,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;QACpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;gBAClC,GAAG,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YACtB,CAAC;QACF,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAC3D,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACpC,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACF,CAAC;IACD,iBAAiB,CAAC,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACxD,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,IAAU,EACV,WAAwB;IAExB,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK;QACrC,CAAC,CAAC,IAAI,CAAC,aAAa;QACpB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACnB,MAAM,GAAG,GAAG,WAAW,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,CAAC;IACpD,OAAO;QACN,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACpD,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACpD,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACpD,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KAC1D,CAAC;AACH,CAAC"}
|
package/dist/clients/Deluge.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
import
|
1
|
+
import ms from "ms";
|
2
|
+
import { InjectionResult, TORRENT_CATEGORY_SUFFIX, TORRENT_TAG, } from "../constants.js";
|
2
3
|
import { CrossSeedError } from "../errors.js";
|
3
4
|
import { Label, logger } from "../logger.js";
|
4
|
-
import { getRuntimeConfig } from "../runtimeConfig.js";
|
5
|
-
import { shouldRecheck, extractCredentialsFromUrl, wait } from "../utils.js";
|
6
5
|
import { resultOf, resultOfErr } from "../Result.js";
|
7
|
-
import
|
6
|
+
import { getRuntimeConfig } from "../runtimeConfig.js";
|
7
|
+
import { extractCredentialsFromUrl, getLogString, shouldRecheck, wait, } from "../utils.js";
|
8
8
|
var DelugeErrorCode;
|
9
9
|
(function (DelugeErrorCode) {
|
10
10
|
DelugeErrorCode[DelugeErrorCode["NO_AUTH"] = 1] = "NO_AUTH";
|
@@ -45,12 +45,11 @@ export default class Deluge {
|
|
45
45
|
throw new CrossSeedError(networkError);
|
46
46
|
}
|
47
47
|
const isConnectedResponse = await this.call("web.connected", [], 0);
|
48
|
-
if (isConnectedResponse.isOk() &&
|
49
|
-
!isConnectedResponse.unwrapOrThrow()) {
|
48
|
+
if (isConnectedResponse.isOk() && !isConnectedResponse.unwrap()) {
|
50
49
|
logger.warn("Deluge WebUI disconnected from daemon...attempting to reconnect.");
|
51
50
|
const webuiHostList = (await this.call("web.get_hosts", [], 0)).unwrapOrThrow(new Error("failed to get host-list for reconnect"));
|
52
51
|
const connectResponse = await this.call("web.connect", [webuiHostList[0][0]], 0);
|
53
|
-
if (connectResponse.isOk() && connectResponse.
|
52
|
+
if (connectResponse.isOk() && connectResponse.unwrap()) {
|
54
53
|
logger.info("Deluge WebUI connected to the daemon.");
|
55
54
|
}
|
56
55
|
else {
|
@@ -67,13 +66,11 @@ export default class Deluge {
|
|
67
66
|
*/
|
68
67
|
async call(method, params, retries = 1) {
|
69
68
|
const { delugeRpcUrl } = getRuntimeConfig();
|
70
|
-
const { href } = extractCredentialsFromUrl(delugeRpcUrl).unwrapOrThrow();
|
69
|
+
const { href } = extractCredentialsFromUrl(delugeRpcUrl).unwrapOrThrow(new CrossSeedError("delugeRpcUrl must be percent-encoded"));
|
71
70
|
const headers = new Headers({ "Content-Type": "application/json" });
|
72
71
|
if (this.delugeCookie)
|
73
72
|
headers.set("Cookie", this.delugeCookie);
|
74
73
|
let response, json;
|
75
|
-
const abortController = new AbortController();
|
76
|
-
setTimeout(() => void abortController.abort(), ms("10 seconds")).unref();
|
77
74
|
try {
|
78
75
|
response = await fetch(href, {
|
79
76
|
body: JSON.stringify({
|
@@ -83,11 +80,12 @@ export default class Deluge {
|
|
83
80
|
}),
|
84
81
|
method: "POST",
|
85
82
|
headers,
|
86
|
-
signal:
|
83
|
+
signal: AbortSignal.timeout(ms("10 seconds")),
|
87
84
|
});
|
88
85
|
}
|
89
86
|
catch (networkError) {
|
90
|
-
if (networkError.name === "AbortError"
|
87
|
+
if (networkError.name === "AbortError" ||
|
88
|
+
networkError.name === "TimeoutError") {
|
91
89
|
throw new Error(`Deluge method ${method} timed out after 10 seconds`);
|
92
90
|
}
|
93
91
|
throw new Error(`Failed to connect to Deluge at ${href}`, {
|
@@ -132,7 +130,7 @@ export default class Deluge {
|
|
132
130
|
async labelEnabled() {
|
133
131
|
const enabledPlugins = await this.call("core.get_enabled_plugins", []);
|
134
132
|
if (enabledPlugins.isOk()) {
|
135
|
-
return enabledPlugins.
|
133
|
+
return enabledPlugins.unwrap().includes("Label");
|
136
134
|
}
|
137
135
|
else {
|
138
136
|
return false;
|
@@ -177,7 +175,7 @@ export default class Deluge {
|
|
177
175
|
this.isLabelEnabled = false;
|
178
176
|
throw new Error("Labels have been disabled.");
|
179
177
|
}
|
180
|
-
if (getCurrentLabels.
|
178
|
+
if (getCurrentLabels.unwrap().includes(label)) {
|
181
179
|
setResult = await this.call("label.set_torrent", [
|
182
180
|
newTorrent.infoHash,
|
183
181
|
label,
|
@@ -192,14 +190,14 @@ export default class Deluge {
|
|
192
190
|
]);
|
193
191
|
}
|
194
192
|
if (setResult.isErr()) {
|
195
|
-
throw new Error(setResult.
|
193
|
+
throw new Error(setResult.unwrapErr().message);
|
196
194
|
}
|
197
195
|
}
|
198
196
|
catch (e) {
|
199
197
|
logger.debug(e);
|
200
198
|
logger.warn({
|
201
199
|
label: Label.DELUGE,
|
202
|
-
message: `Failed to label ${
|
200
|
+
message: `Failed to label ${getLogString(newTorrent)} as ${label}`,
|
203
201
|
});
|
204
202
|
}
|
205
203
|
}
|
@@ -215,7 +213,7 @@ export default class Deluge {
|
|
215
213
|
try {
|
216
214
|
let torrentInfo;
|
217
215
|
if (searchee.infoHash) {
|
218
|
-
torrentInfo = await this.getTorrentInfo(searchee);
|
216
|
+
torrentInfo = await this.getTorrentInfo(searchee.infoHash);
|
219
217
|
if (!torrentInfo.complete) {
|
220
218
|
return InjectionResult.TORRENT_NOT_COMPLETE;
|
221
219
|
}
|
@@ -223,17 +221,17 @@ export default class Deluge {
|
|
223
221
|
if (!path && (!searchee.infoHash || !torrentInfo)) {
|
224
222
|
logger.debug({
|
225
223
|
label: Label.DELUGE,
|
226
|
-
message: `Injection failure: ${
|
224
|
+
message: `Injection failure: ${getLogString(searchee)} was missing critical data.`,
|
227
225
|
});
|
228
226
|
return InjectionResult.FAILURE;
|
229
227
|
}
|
230
228
|
const torrentFileName = `${newTorrent.getFileSystemSafeName()}.cross-seed.torrent`;
|
231
229
|
const encodedTorrentData = newTorrent.encode().toString("base64");
|
232
230
|
const torrentPath = path ? path : torrentInfo.save_path;
|
233
|
-
const params = this.formatData(torrentFileName, encodedTorrentData, torrentPath, decision);
|
231
|
+
const params = this.formatData(torrentFileName, encodedTorrentData, torrentPath, searchee, decision);
|
234
232
|
const addResponse = await this.call("core.add_torrent_file", params);
|
235
233
|
if (addResponse.isErr()) {
|
236
|
-
const addResponseError = addResponse.
|
234
|
+
const addResponseError = addResponse.unwrapErr();
|
237
235
|
if (addResponseError.message.includes("already")) {
|
238
236
|
return InjectionResult.ALREADY_EXISTS;
|
239
237
|
}
|
@@ -247,20 +245,18 @@ export default class Deluge {
|
|
247
245
|
else {
|
248
246
|
logger.debug({
|
249
247
|
label: Label.DELUGE,
|
250
|
-
message: `Unknown injection failure: ${
|
248
|
+
message: `Unknown injection failure: ${getLogString(newTorrent)}`,
|
251
249
|
});
|
252
250
|
return InjectionResult.FAILURE;
|
253
251
|
}
|
254
252
|
}
|
255
253
|
if (addResponse.isOk()) {
|
256
254
|
await this.setLabel(newTorrent, this.calculateLabel(searchee, torrentInfo));
|
257
|
-
if (shouldRecheck(decision)) {
|
255
|
+
if (shouldRecheck(searchee, decision)) {
|
258
256
|
// when paused, libtorrent doesnt start rechecking
|
259
257
|
// leaves torrent ready to download - ~99%
|
260
258
|
await wait(1000);
|
261
|
-
await this.
|
262
|
-
[newTorrent.infoHash],
|
263
|
-
]);
|
259
|
+
await this.recheckTorrent(newTorrent.infoHash);
|
264
260
|
}
|
265
261
|
}
|
266
262
|
}
|
@@ -274,15 +270,21 @@ export default class Deluge {
|
|
274
270
|
}
|
275
271
|
return InjectionResult.SUCCESS;
|
276
272
|
}
|
273
|
+
async recheckTorrent(infoHash) {
|
274
|
+
// Pause first as it may resume after recheck automatically
|
275
|
+
await this.call("core.pause_torrent", [[infoHash]]);
|
276
|
+
await this.call("core.force_recheck", [[infoHash]]);
|
277
|
+
}
|
277
278
|
/**
|
278
279
|
* formats the json for rpc calls to inject
|
279
280
|
* @param filename filename for the injecting torrent file
|
280
281
|
* @param filedump string with encoded torrent file
|
281
282
|
* @param path path to the torrent data
|
283
|
+
* @param searchee searchee of the original torrent matched
|
282
284
|
* @param decision decision by which the newTorrent was matched
|
283
285
|
*/
|
284
|
-
formatData(filename, filedump, path, decision) {
|
285
|
-
const toRecheck = shouldRecheck(decision);
|
286
|
+
formatData(filename, filedump, path, searchee, decision) {
|
287
|
+
const toRecheck = shouldRecheck(searchee, decision);
|
286
288
|
return [
|
287
289
|
filename,
|
288
290
|
filedump,
|
@@ -295,62 +297,83 @@ export default class Deluge {
|
|
295
297
|
}
|
296
298
|
/**
|
297
299
|
* returns directory of an infohash in deluge as a string
|
298
|
-
* @param searchee Searchee or Metafile for torrent to lookup in client
|
299
300
|
* @return Result containing either a string with path or reason it was not provided
|
301
|
+
* @param meta the metafile or searchee of the original torrent
|
302
|
+
* @param options object with options relating to filtering
|
300
303
|
*/
|
301
|
-
async getDownloadDir(
|
302
|
-
let
|
303
|
-
const params = [["save_path", "progress"], { hash:
|
304
|
+
async getDownloadDir(meta, options) {
|
305
|
+
let response;
|
306
|
+
const params = [["save_path", "progress"], { hash: meta.infoHash }];
|
304
307
|
try {
|
305
308
|
response = await this.call("web.update_ui", params);
|
306
309
|
}
|
307
310
|
catch (e) {
|
308
311
|
return resultOfErr("UNKNOWN_ERROR");
|
309
312
|
}
|
310
|
-
if (response.isOk()) {
|
311
|
-
|
312
|
-
if (!torrentResponse) {
|
313
|
-
return resultOfErr("UNKNOWN_ERROR");
|
314
|
-
}
|
315
|
-
torrent = torrentResponse[searchee.infoHash];
|
316
|
-
if (!torrent) {
|
317
|
-
return resultOfErr("NOT_FOUND");
|
318
|
-
}
|
319
|
-
if (torrent.progress !== 100) {
|
320
|
-
return resultOfErr("TORRENT_NOT_COMPLETE");
|
321
|
-
}
|
313
|
+
if (!response.isOk()) {
|
314
|
+
return resultOfErr("UNKNOWN_ERROR");
|
322
315
|
}
|
323
|
-
|
316
|
+
const torrentResponse = response.unwrap().torrents;
|
317
|
+
if (!torrentResponse) {
|
324
318
|
return resultOfErr("UNKNOWN_ERROR");
|
325
319
|
}
|
320
|
+
const torrent = torrentResponse[meta.infoHash];
|
321
|
+
if (!torrent) {
|
322
|
+
return resultOfErr("NOT_FOUND");
|
323
|
+
}
|
324
|
+
if (options.onlyCompleted && torrent.progress !== 100) {
|
325
|
+
return resultOfErr("TORRENT_NOT_COMPLETE");
|
326
|
+
}
|
326
327
|
return resultOf(torrent.save_path);
|
327
328
|
}
|
329
|
+
/**
|
330
|
+
* checks if a torrent is complete in deluge
|
331
|
+
* @param infoHash the infoHash of the torrent to check
|
332
|
+
* @return Result containing either a boolean or reason it was not provided
|
333
|
+
*/
|
334
|
+
async isTorrentComplete(infoHash) {
|
335
|
+
try {
|
336
|
+
const torrentInfo = await this.getTorrentInfo(infoHash);
|
337
|
+
return torrentInfo.complete ? resultOf(true) : resultOf(false);
|
338
|
+
}
|
339
|
+
catch (e) {
|
340
|
+
return resultOfErr("NOT_FOUND");
|
341
|
+
}
|
342
|
+
}
|
328
343
|
/**
|
329
344
|
* returns information needed to complete/validate injection
|
330
|
-
* @param searchee the Searchee for the torrent you are requesting TorrentInfo from
|
331
345
|
* @return Promise of TorrentInfo type
|
346
|
+
* @param infoHash infohash to query for in the client
|
332
347
|
*/
|
333
|
-
async getTorrentInfo(
|
334
|
-
if (!searchee.infoHash) {
|
335
|
-
throw new Error("Can't search a torrent without a infoHash");
|
336
|
-
}
|
348
|
+
async getTorrentInfo(infoHash) {
|
337
349
|
let torrent;
|
338
350
|
try {
|
339
351
|
const params = [
|
340
|
-
[
|
341
|
-
|
352
|
+
[
|
353
|
+
"name",
|
354
|
+
"state",
|
355
|
+
"progress",
|
356
|
+
"save_path",
|
357
|
+
"label",
|
358
|
+
"total_remaining",
|
359
|
+
],
|
360
|
+
{ hash: infoHash },
|
342
361
|
];
|
343
362
|
const response = (await this.call("web.update_ui", params)).unwrapOrThrow(new Error("failed to fetch the torrent list"));
|
344
363
|
if (response.torrents) {
|
345
|
-
torrent = response.torrents?.[
|
364
|
+
torrent = response.torrents?.[infoHash];
|
346
365
|
}
|
347
366
|
else {
|
348
367
|
throw new Error("Client returned unexpected response (object missing)");
|
349
368
|
}
|
350
369
|
if (torrent === undefined) {
|
351
|
-
throw new Error(`Torrent not found in client (${
|
370
|
+
throw new Error(`Torrent not found in client (${infoHash})`);
|
352
371
|
}
|
353
|
-
const completedTorrent = torrent.state === "
|
372
|
+
const completedTorrent = (torrent.state === "Paused" &&
|
373
|
+
(torrent.progress === 100 || !torrent.total_remaining)) ||
|
374
|
+
torrent.state === "Seeding" ||
|
375
|
+
torrent.progress === 100 ||
|
376
|
+
!torrent.total_remaining;
|
354
377
|
const torrentLabel = this.isLabelEnabled && torrent.label.length != 0
|
355
378
|
? torrent.label
|
356
379
|
: undefined;
|
@@ -363,7 +386,7 @@ export default class Deluge {
|
|
363
386
|
catch (e) {
|
364
387
|
logger.error({
|
365
388
|
label: Label.DELUGE,
|
366
|
-
message: `Failed to fetch torrent data: ${
|
389
|
+
message: `Failed to fetch torrent data: ${infoHash}`,
|
367
390
|
});
|
368
391
|
logger.debug(e);
|
369
392
|
throw new Error("web.update_ui: failed to fetch data from client", {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Deluge.js","sourceRoot":"","sources":["../../src/clients/Deluge.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"Deluge.js","sourceRoot":"","sources":["../../src/clients/Deluge.ts"],"names":[],"mappings":"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"}
|
@@ -1,10 +1,11 @@
|
|
1
|
-
import
|
2
|
-
import {
|
1
|
+
import ms from "ms";
|
2
|
+
import { dirname, resolve } from "path";
|
3
|
+
import { InjectionResult, TORRENT_CATEGORY_SUFFIX, TORRENT_TAG, } from "../constants.js";
|
3
4
|
import { CrossSeedError } from "../errors.js";
|
4
5
|
import { Label, logger } from "../logger.js";
|
5
|
-
import { getRuntimeConfig } from "../runtimeConfig.js";
|
6
|
-
import { shouldRecheck, extractCredentialsFromUrl, wait } from "../utils.js";
|
7
6
|
import { resultOf, resultOfErr } from "../Result.js";
|
7
|
+
import { getRuntimeConfig } from "../runtimeConfig.js";
|
8
|
+
import { extractCredentialsFromUrl, getLogString, sanitizeInfoHash, shouldRecheck, wait, } from "../utils.js";
|
8
9
|
const X_WWW_FORM_URLENCODED = {
|
9
10
|
"Content-Type": "application/x-www-form-urlencoded",
|
10
11
|
};
|
@@ -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
|
-
@return either a string containing the path or
|
129
|
+
@return either a string containing the path or an error message
|
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
|
-
label: Label.QBITTORRENT,
|
186
|
-
message: `Failed to retrieve torrent info using infohash_v1 ${hash}, checking all hashes`,
|
187
|
-
});
|
188
|
-
const torrents = await this.getAllTorrentInfo();
|
189
|
-
return torrents.find((torrent) => hash === torrent.hash ||
|
190
|
-
hash === torrent.infohash_v1 ||
|
191
|
-
hash === torrent.infohash_v2);
|
200
|
+
return undefined;
|
192
201
|
}
|
193
|
-
|
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));
|
212
|
+
}
|
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
|
}
|