From 97e92c8b982a8beeb93d47cdd9a310e9eef46273 Mon Sep 17 00:00:00 2001 From: HaveAGitGat Date: Mon, 6 May 2024 05:38:04 +0000 Subject: [PATCH] Apply auto-build changes --- .../file/checkFileExtension/1.0.0/index.js | 4 +- .../file/copyMoveFolderContent/1.0.0/index.js | 50 +- .../FlowHelpers/1.0.0/fileMoveOrCopy.js | 468 +++++++------- FlowPlugins/FlowHelpers/1.0.0/fileUtils.js | 136 ++-- .../FlowHelpers/1.0.0/hardwareUtils.js | 582 +++++++++--------- 5 files changed, 610 insertions(+), 630 deletions(-) diff --git a/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js index c38a7e654..c0adfb2fa 100644 --- a/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js @@ -45,8 +45,8 @@ var plugin = function (args) { // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign args.inputs = lib.loadDefaultValues(args.inputs, details); var extensions = String(args.inputs.extensions); - var extensionArray = extensions.trim().split(','); - var extension = (0, fileUtils_1.getContainer)(args.inputFileObj._id); + var extensionArray = extensions.trim().split(',').map(function (row) { return row.toLowerCase(); }); + var extension = (0, fileUtils_1.getContainer)(args.inputFileObj._id).toLowerCase(); var extensionMatch = false; if (extensionArray.includes(extension)) { extensionMatch = true; diff --git a/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js index e734badd2..4ac05b361 100644 --- a/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js @@ -150,33 +150,31 @@ var details = function () { return ({ ], }); }; exports.details = details; -var doOperation = function (_a) { - var args = _a.args, sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, operation = _a.operation; - return __awaiter(void 0, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Input path: ".concat(sourcePath)); - args.jobLog("Output path: ".concat(destinationPath)); - if (!(sourcePath === destinationPath)) return [3 /*break*/, 1]; - args.jobLog("Input and output path are the same, skipping ".concat(operation)); - return [3 /*break*/, 3]; - case 1: - args.deps.fsextra.ensureDirSync((0, fileUtils_1.getFileAbosluteDir)(destinationPath)); - return [4 /*yield*/, (0, fileMoveOrCopy_1.default)({ - operation: operation, - sourcePath: sourcePath, - destinationPath: destinationPath, - args: args, - })]; - case 2: - _b.sent(); - _b.label = 3; - case 3: return [2 /*return*/]; - } - }); +var doOperation = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var args = _b.args, sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, operation = _b.operation; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Input path: ".concat(sourcePath)); + args.jobLog("Output path: ".concat(destinationPath)); + if (!(sourcePath === destinationPath)) return [3 /*break*/, 1]; + args.jobLog("Input and output path are the same, skipping ".concat(operation)); + return [3 /*break*/, 3]; + case 1: + args.deps.fsextra.ensureDirSync((0, fileUtils_1.getFileAbosluteDir)(destinationPath)); + return [4 /*yield*/, (0, fileMoveOrCopy_1.default)({ + operation: operation, + sourcePath: sourcePath, + destinationPath: destinationPath, + args: args, + })]; + case 2: + _c.sent(); + _c.label = 3; + case 3: return [2 /*return*/]; + } }); -}; +}); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function () { var lib, _a, keepRelativePath, allFiles, sourceDirectory, outputDirectory, copyOrMove, fileExtensions, outputPath, subStem, sourceDir, filesInDir, i; diff --git a/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js b/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js index c6f586691..8dc2dbc57 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js +++ b/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js @@ -69,260 +69,248 @@ var compareOldNew = function (_a) { + " cache file of size ".concat(sourceFileSize)); } }; -var tryMove = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error, err_2, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 1")); - error = false; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, fs_1.promises.rename(sourcePath, destinationPath)]; - case 2: - _b.sent(); - return [3 /*break*/, 4]; - case 3: - err_2 = _b.sent(); - error = true; - args.jobLog("File move error: ".concat(JSON.stringify(err_2))); - return [3 /*break*/, 4]; - case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 5: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - } - }); +var tryMove = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error, err_2, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 1")); + error = false; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + return [4 /*yield*/, fs_1.promises.rename(sourcePath, destinationPath)]; + case 2: + _c.sent(); + return [3 /*break*/, 4]; + case 3: + err_2 = _c.sent(); + error = true; + args.jobLog("File move error: ".concat(JSON.stringify(err_2))); + return [3 /*break*/, 4]; + case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 5: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + } }); -}; +}); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars -var tryMvdir = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 2")); - error = false; - return [4 /*yield*/, new Promise(function (resolve) { - // fs-extra and move-file don't work when destination is on windows root of drive - // mvdir will try to move else fall back to copy/unlink - // potential bug on unraid - args.deps.mvdir(sourcePath, destinationPath, { overwrite: true }) - .then(function () { - resolve(true); - }).catch(function (err) { - error = true; - args.jobLog("File move error: ".concat(err)); - resolve(err); - }); - })]; - case 1: - _b.sent(); - return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 2: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - } - }); +var tryMvdir = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 2")); + error = false; + return [4 /*yield*/, new Promise(function (resolve) { + // fs-extra and move-file don't work when destination is on windows root of drive + // mvdir will try to move else fall back to copy/unlink + // potential bug on unraid + args.deps.mvdir(sourcePath, destinationPath, { overwrite: true }) + .then(function () { + resolve(true); + }).catch(function (err) { + error = true; + args.jobLog("File move error: ".concat(err)); + resolve(err); + }); + })]; + case 1: + _c.sent(); + return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 2: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + } }); -}; +}); }; // Keep in e.g. https://github.com/HaveAGitGat/Tdarr/issues/858 -var tyNcp = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error_1, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!args.deps.ncp) return [3 /*break*/, 3]; - args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 1")); - error_1 = false; - return [4 /*yield*/, new Promise(function (resolve) { - args.deps.ncp(sourcePath, destinationPath, function (err) { - if (err) { - error_1 = true; - args.jobLog("File copy error: ".concat(err)); - resolve(err); - } - else { - resolve(true); - } - }); - })]; - case 1: - _b.sent(); - return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 2: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error_1 || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - case 3: return [2 /*return*/, false]; - } - }); +var tyNcp = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error_1, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!args.deps.ncp) return [3 /*break*/, 3]; + args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 1")); + error_1 = false; + return [4 /*yield*/, new Promise(function (resolve) { + args.deps.ncp(sourcePath, destinationPath, function (err) { + if (err) { + error_1 = true; + args.jobLog("File copy error: ".concat(err)); + resolve(err); + } + else { + resolve(true); + } + }); + })]; + case 1: + _c.sent(); + return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 2: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error_1 || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + case 3: return [2 /*return*/, false]; + } }); -}; -var tryNormalCopy = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error, err_3, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 2")); - error = false; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, fs_1.promises.copyFile(sourcePath, destinationPath)]; - case 2: - _b.sent(); - return [3 /*break*/, 4]; - case 3: - err_3 = _b.sent(); - error = true; - args.jobLog("File copy error: ".concat(JSON.stringify(err_3))); - return [3 /*break*/, 4]; - case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 5: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - } - }); +}); }; +var tryNormalCopy = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error, err_3, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 2")); + error = false; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + return [4 /*yield*/, fs_1.promises.copyFile(sourcePath, destinationPath)]; + case 2: + _c.sent(); + return [3 /*break*/, 4]; + case 3: + err_3 = _c.sent(); + error = true; + args.jobLog("File copy error: ".concat(JSON.stringify(err_3))); + return [3 /*break*/, 4]; + case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 5: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + } }); -}; -var cleanSourceFile = function (_a) { - var args = _a.args, sourcePath = _a.sourcePath; - return __awaiter(void 0, void 0, void 0, function () { - var err_4; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - _b.trys.push([0, 2, , 3]); - args.jobLog("Deleting source file ".concat(sourcePath)); - return [4 /*yield*/, fs_1.promises.unlink(sourcePath)]; - case 1: - _b.sent(); - return [3 /*break*/, 3]; - case 2: - err_4 = _b.sent(); - args.jobLog("Failed to delete source file ".concat(sourcePath, ": ").concat(JSON.stringify(err_4))); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); +}); }; +var cleanSourceFile = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var err_4; + var args = _b.args, sourcePath = _b.sourcePath; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _c.trys.push([0, 2, , 3]); + args.jobLog("Deleting source file ".concat(sourcePath)); + return [4 /*yield*/, fs_1.promises.unlink(sourcePath)]; + case 1: + _c.sent(); + return [3 /*break*/, 3]; + case 2: + err_4 = _c.sent(); + args.jobLog("Failed to delete source file ".concat(sourcePath, ": ").concat(JSON.stringify(err_4))); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } }); -}; -var fileMoveOrCopy = function (_a) { - var operation = _a.operation, sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var sourceFileSize, moved, ncpd, copied; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog('Calculating cache file size in bytes'); - return [4 /*yield*/, getSizeBytes(sourcePath)]; - case 1: - sourceFileSize = _b.sent(); - args.jobLog("".concat(sourceFileSize)); - if (!(operation === 'move')) return [3 /*break*/, 3]; - return [4 /*yield*/, tryMove({ - sourcePath: sourcePath, - destinationPath: destinationPath, - args: args, - sourceFileSize: sourceFileSize, - })]; - case 2: - moved = _b.sent(); - if (moved) { - return [2 /*return*/, true]; - } - // disable: https://github.com/HaveAGitGat/Tdarr/issues/885 - // const mvdird = await tryMvdir({ - // sourcePath, - // destinationPath, - // args, - // sourceFileSize, - // }); - // if (mvdird) { - // return true; - // } - args.jobLog('Failed to move file, trying copy'); - _b.label = 3; - case 3: return [4 /*yield*/, tyNcp({ +}); }; +var fileMoveOrCopy = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var sourceFileSize, moved, ncpd, copied; + var operation = _b.operation, sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog('Calculating cache file size in bytes'); + return [4 /*yield*/, getSizeBytes(sourcePath)]; + case 1: + sourceFileSize = _c.sent(); + args.jobLog("".concat(sourceFileSize)); + if (!(operation === 'move')) return [3 /*break*/, 3]; + return [4 /*yield*/, tryMove({ sourcePath: sourcePath, destinationPath: destinationPath, args: args, sourceFileSize: sourceFileSize, })]; - case 4: - ncpd = _b.sent(); - if (!ncpd) return [3 /*break*/, 7]; - if (!(operation === 'move')) return [3 /*break*/, 6]; - return [4 /*yield*/, cleanSourceFile({ - args: args, - sourcePath: sourcePath, - })]; - case 5: - _b.sent(); - _b.label = 6; - case 6: return [2 /*return*/, true]; - case 7: return [4 /*yield*/, tryNormalCopy({ + case 2: + moved = _c.sent(); + if (moved) { + return [2 /*return*/, true]; + } + // disable: https://github.com/HaveAGitGat/Tdarr/issues/885 + // const mvdird = await tryMvdir({ + // sourcePath, + // destinationPath, + // args, + // sourceFileSize, + // }); + // if (mvdird) { + // return true; + // } + args.jobLog('Failed to move file, trying copy'); + _c.label = 3; + case 3: return [4 /*yield*/, tyNcp({ + sourcePath: sourcePath, + destinationPath: destinationPath, + args: args, + sourceFileSize: sourceFileSize, + })]; + case 4: + ncpd = _c.sent(); + if (!ncpd) return [3 /*break*/, 7]; + if (!(operation === 'move')) return [3 /*break*/, 6]; + return [4 /*yield*/, cleanSourceFile({ + args: args, sourcePath: sourcePath, - destinationPath: destinationPath, + })]; + case 5: + _c.sent(); + _c.label = 6; + case 6: return [2 /*return*/, true]; + case 7: return [4 /*yield*/, tryNormalCopy({ + sourcePath: sourcePath, + destinationPath: destinationPath, + args: args, + sourceFileSize: sourceFileSize, + })]; + case 8: + copied = _c.sent(); + if (!copied) return [3 /*break*/, 11]; + if (!(operation === 'move')) return [3 /*break*/, 10]; + return [4 /*yield*/, cleanSourceFile({ args: args, - sourceFileSize: sourceFileSize, + sourcePath: sourcePath, })]; - case 8: - copied = _b.sent(); - if (!copied) return [3 /*break*/, 11]; - if (!(operation === 'move')) return [3 /*break*/, 10]; - return [4 /*yield*/, cleanSourceFile({ - args: args, - sourcePath: sourcePath, - })]; - case 9: - _b.sent(); - _b.label = 10; - case 10: return [2 /*return*/, true]; - case 11: throw new Error("Failed to ".concat(operation, " file")); - } - }); + case 9: + _c.sent(); + _c.label = 10; + case 10: return [2 /*return*/, true]; + case 11: throw new Error("Failed to ".concat(operation, " file")); + } }); -}; +}); }; exports.default = fileMoveOrCopy; diff --git a/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js b/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js index 3f777d334..1e3604571 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js +++ b/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js @@ -80,80 +80,78 @@ var getFileSize = function (file) { return __awaiter(void 0, void 0, void 0, fun }); }); }; exports.getFileSize = getFileSize; -var moveFileAndValidate = function (_a) { - var inputPath = _a.inputPath, outputPath = _a.outputPath, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var inputSize, res1, outputSize, err_1, res2, errMessage; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, (0, exports.getFileSize)(inputPath)]; - case 1: - inputSize = _b.sent(); - args.jobLog("Attempt 1: Moving file from ".concat(inputPath, " to ").concat(outputPath)); - return [4 /*yield*/, new Promise(function (resolve) { - args.deps.gracefulfs.rename(inputPath, outputPath, function (err) { - if (err) { - args.jobLog("Failed to move file from ".concat(inputPath, " to ").concat(outputPath)); - args.jobLog(JSON.stringify(err)); - resolve(false); - } - else { - resolve(true); - } - }); - })]; - case 2: - res1 = _b.sent(); - outputSize = 0; - _b.label = 3; - case 3: - _b.trys.push([3, 5, , 6]); - return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; - case 4: - outputSize = _b.sent(); - return [3 /*break*/, 6]; - case 5: - err_1 = _b.sent(); - args.jobLog(JSON.stringify(err_1)); - return [3 /*break*/, 6]; - case 6: - if (!(!res1 || inputSize !== outputSize)) return [3 /*break*/, 9]; - if (inputSize !== outputSize) { - args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") - + "does not equal output: ".concat(outputSize)); - } - args.jobLog("Attempt 1 failed: Moving file from ".concat(inputPath, " to ").concat(outputPath)); - args.jobLog("Attempt 2: Moving file from ".concat(inputPath, " to ").concat(outputPath)); - return [4 /*yield*/, new Promise(function (resolve) { - args.deps.mvdir(inputPath, outputPath, { overwrite: true }) - .then(function () { - resolve(true); - }).catch(function (err) { +var moveFileAndValidate = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var inputSize, res1, outputSize, err_1, res2, errMessage; + var inputPath = _b.inputPath, outputPath = _b.outputPath, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, (0, exports.getFileSize)(inputPath)]; + case 1: + inputSize = _c.sent(); + args.jobLog("Attempt 1: Moving file from ".concat(inputPath, " to ").concat(outputPath)); + return [4 /*yield*/, new Promise(function (resolve) { + args.deps.gracefulfs.rename(inputPath, outputPath, function (err) { + if (err) { args.jobLog("Failed to move file from ".concat(inputPath, " to ").concat(outputPath)); args.jobLog(JSON.stringify(err)); resolve(false); - }); - })]; - case 7: - res2 = _b.sent(); - return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; - case 8: - outputSize = _b.sent(); - if (!res2 || inputSize !== outputSize) { - if (inputSize !== outputSize) { - args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") - + "does not equal output: ".concat(outputSize)); - } - errMessage = "Failed to move file from ".concat(inputPath, " to ").concat(outputPath, ", check errors above"); - args.jobLog(errMessage); - throw new Error(errMessage); + } + else { + resolve(true); + } + }); + })]; + case 2: + res1 = _c.sent(); + outputSize = 0; + _c.label = 3; + case 3: + _c.trys.push([3, 5, , 6]); + return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; + case 4: + outputSize = _c.sent(); + return [3 /*break*/, 6]; + case 5: + err_1 = _c.sent(); + args.jobLog(JSON.stringify(err_1)); + return [3 /*break*/, 6]; + case 6: + if (!(!res1 || inputSize !== outputSize)) return [3 /*break*/, 9]; + if (inputSize !== outputSize) { + args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") + + "does not equal output: ".concat(outputSize)); + } + args.jobLog("Attempt 1 failed: Moving file from ".concat(inputPath, " to ").concat(outputPath)); + args.jobLog("Attempt 2: Moving file from ".concat(inputPath, " to ").concat(outputPath)); + return [4 /*yield*/, new Promise(function (resolve) { + args.deps.mvdir(inputPath, outputPath, { overwrite: true }) + .then(function () { + resolve(true); + }).catch(function (err) { + args.jobLog("Failed to move file from ".concat(inputPath, " to ").concat(outputPath)); + args.jobLog(JSON.stringify(err)); + resolve(false); + }); + })]; + case 7: + res2 = _c.sent(); + return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; + case 8: + outputSize = _c.sent(); + if (!res2 || inputSize !== outputSize) { + if (inputSize !== outputSize) { + args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") + + "does not equal output: ".concat(outputSize)); } - _b.label = 9; - case 9: return [2 /*return*/]; - } - }); + errMessage = "Failed to move file from ".concat(inputPath, " to ").concat(outputPath, ", check errors above"); + args.jobLog(errMessage); + throw new Error(errMessage); + } + _c.label = 9; + case 9: return [2 /*return*/]; + } }); -}; +}); }; exports.moveFileAndValidate = moveFileAndValidate; var getPluginWorkDir = function (args) { var pluginWorkDir = "".concat(args.workDir, "/").concat(new Date().getTime()); diff --git a/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js b/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js index da276ebb5..1b188ef40 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js +++ b/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js @@ -61,80 +61,78 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getEncoder = exports.getBestNvencDevice = exports.hasEncoder = void 0; var os_1 = __importDefault(require("os")); -var hasEncoder = function (_a) { - var ffmpegPath = _a.ffmpegPath, encoder = _a.encoder, inputArgs = _a.inputArgs, outputArgs = _a.outputArgs, filter = _a.filter, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var spawn, isEnabled, commandArr_1, err_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - spawn = require('child_process').spawn; - isEnabled = false; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - commandArr_1 = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], inputArgs, true), [ - '-f', - 'lavfi', - '-i', - 'color=c=black:s=256x256:d=1:r=30' - ], false), (filter ? filter.split(' ') : []), true), [ - '-c:v', - encoder - ], false), outputArgs, true), [ - '-f', - 'null', - '/dev/null', - ], false); - args.jobLog("Checking for encoder ".concat(encoder, " with command:")); - args.jobLog("".concat(ffmpegPath, " ").concat(commandArr_1.join(' '))); - return [4 /*yield*/, new Promise(function (resolve) { - var error = function () { - resolve(false); - }; - var stderr = ''; - try { - var thread = spawn(ffmpegPath, commandArr_1); - thread.on('error', function () { - // catches execution error (bad file) - error(); - }); - thread.stdout.on('data', function (data) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - stderr += data; - }); - thread.stderr.on('data', function (data) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - stderr += data; - }); - thread.on('close', function (code) { - if (code !== 0) { - error(); - } - else { - resolve(true); - } - }); - } - catch (err) { - // catches execution error (no file) +var hasEncoder = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var spawn, isEnabled, commandArr_1, err_1; + var ffmpegPath = _b.ffmpegPath, encoder = _b.encoder, inputArgs = _b.inputArgs, outputArgs = _b.outputArgs, filter = _b.filter, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + spawn = require('child_process').spawn; + isEnabled = false; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + commandArr_1 = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], inputArgs, true), [ + '-f', + 'lavfi', + '-i', + 'color=c=black:s=256x256:d=1:r=30' + ], false), (filter ? filter.split(' ') : []), true), [ + '-c:v', + encoder + ], false), outputArgs, true), [ + '-f', + 'null', + '/dev/null', + ], false); + args.jobLog("Checking for encoder ".concat(encoder, " with command:")); + args.jobLog("".concat(ffmpegPath, " ").concat(commandArr_1.join(' '))); + return [4 /*yield*/, new Promise(function (resolve) { + var error = function () { + resolve(false); + }; + var stderr = ''; + try { + var thread = spawn(ffmpegPath, commandArr_1); + thread.on('error', function () { + // catches execution error (bad file) error(); - } - })]; - case 2: - isEnabled = _b.sent(); - args.jobLog("Encoder ".concat(encoder, " is ").concat(isEnabled ? 'enabled' : 'disabled')); - return [3 /*break*/, 4]; - case 3: - err_1 = _b.sent(); - // eslint-disable-next-line no-console - console.log(err_1); - return [3 /*break*/, 4]; - case 4: return [2 /*return*/, isEnabled]; - } - }); + }); + thread.stdout.on('data', function (data) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + stderr += data; + }); + thread.stderr.on('data', function (data) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + stderr += data; + }); + thread.on('close', function (code) { + if (code !== 0) { + error(); + } + else { + resolve(true); + } + }); + } + catch (err) { + // catches execution error (no file) + error(); + } + })]; + case 2: + isEnabled = _c.sent(); + args.jobLog("Encoder ".concat(encoder, " is ").concat(isEnabled ? 'enabled' : 'disabled')); + return [3 /*break*/, 4]; + case 3: + err_1 = _c.sent(); + // eslint-disable-next-line no-console + console.log(err_1); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/, isEnabled]; + } }); -}; +}); }; exports.hasEncoder = hasEncoder; // credit to UNCode101 for this var getBestNvencDevice = function (_a) { @@ -207,236 +205,234 @@ var encoderFilter = function (encoder, targetCodec) { } return false; }; -var getEncoder = function (_a) { - var targetCodec = _a.targetCodec, hardwareEncoding = _a.hardwareEncoding, hardwareType = _a.hardwareType, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var supportedGpuEncoders, gpuEncoders, filteredGpuEncoders, idx, _i, filteredGpuEncoders_1, gpuEncoder, _b, enabledDevices, res; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - supportedGpuEncoders = ['hevc', 'h264', 'av1']; - if (!(args.workerType - && args.workerType.includes('gpu') - && hardwareEncoding && (supportedGpuEncoders.includes(targetCodec)))) return [3 /*break*/, 5]; - gpuEncoders = [ - { - encoder: 'hevc_nvenc', - enabled: false, - inputArgs: [ - '-hwaccel', - 'cuda', - ], - outputArgs: [], - filter: '', - }, - { - encoder: 'hevc_amf', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'hevc_qsv', - enabled: false, - inputArgs: [ - '-hwaccel', - 'qsv', - ], - outputArgs: __spreadArray([], (os_1.default.platform() === 'win32' ? ['-load_plugin', 'hevc_hw'] : []), true), - filter: '', - }, - { - encoder: 'hevc_vaapi', - inputArgs: [ - '-hwaccel', - 'vaapi', - '-hwaccel_device', - '/dev/dri/renderD128', - '-hwaccel_output_format', - 'vaapi', - ], - outputArgs: [], - enabled: false, - filter: '-vf format=nv12,hwupload', - }, - { - encoder: 'hevc_videotoolbox', - enabled: false, - inputArgs: [ - '-hwaccel', - 'videotoolbox', - ], - outputArgs: [], - filter: '', - }, - // h264 - { - encoder: 'h264_nvenc', - enabled: false, - inputArgs: [ - '-hwaccel', - 'cuda', - ], - outputArgs: [], - filter: '', - }, - { - encoder: 'h264_amf', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'h264_qsv', - enabled: false, - inputArgs: [ - '-hwaccel', - 'qsv', - ], - outputArgs: [], - filter: '', - }, - { - encoder: 'h264_videotoolbox', - enabled: false, - inputArgs: [ - '-hwaccel', - 'videotoolbox', - ], - outputArgs: [], - filter: '', - }, - // av1 - { - encoder: 'av1_nvenc', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'av1_amf', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'av1_qsv', - enabled: false, +var getEncoder = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var supportedGpuEncoders, gpuEncoders, filteredGpuEncoders, idx, _i, filteredGpuEncoders_1, gpuEncoder, _c, enabledDevices, res; + var targetCodec = _b.targetCodec, hardwareEncoding = _b.hardwareEncoding, hardwareType = _b.hardwareType, args = _b.args; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + supportedGpuEncoders = ['hevc', 'h264', 'av1']; + if (!(args.workerType + && args.workerType.includes('gpu') + && hardwareEncoding && (supportedGpuEncoders.includes(targetCodec)))) return [3 /*break*/, 5]; + gpuEncoders = [ + { + encoder: 'hevc_nvenc', + enabled: false, + inputArgs: [ + '-hwaccel', + 'cuda', + ], + outputArgs: [], + filter: '', + }, + { + encoder: 'hevc_amf', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'hevc_qsv', + enabled: false, + inputArgs: [ + '-hwaccel', + 'qsv', + ], + outputArgs: __spreadArray([], (os_1.default.platform() === 'win32' ? ['-load_plugin', 'hevc_hw'] : []), true), + filter: '', + }, + { + encoder: 'hevc_vaapi', + inputArgs: [ + '-hwaccel', + 'vaapi', + '-hwaccel_device', + '/dev/dri/renderD128', + '-hwaccel_output_format', + 'vaapi', + ], + outputArgs: [], + enabled: false, + filter: '-vf format=nv12,hwupload', + }, + { + encoder: 'hevc_videotoolbox', + enabled: false, + inputArgs: [ + '-hwaccel', + 'videotoolbox', + ], + outputArgs: [], + filter: '', + }, + // h264 + { + encoder: 'h264_nvenc', + enabled: false, + inputArgs: [ + '-hwaccel', + 'cuda', + ], + outputArgs: [], + filter: '', + }, + { + encoder: 'h264_amf', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'h264_qsv', + enabled: false, + inputArgs: [ + '-hwaccel', + 'qsv', + ], + outputArgs: [], + filter: '', + }, + { + encoder: 'h264_videotoolbox', + enabled: false, + inputArgs: [ + '-hwaccel', + 'videotoolbox', + ], + outputArgs: [], + filter: '', + }, + // av1 + { + encoder: 'av1_nvenc', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'av1_amf', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'av1_qsv', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'av1_vaapi', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + ]; + filteredGpuEncoders = gpuEncoders.filter(function (device) { return encoderFilter(device.encoder, targetCodec); }); + if (hardwareEncoding && hardwareType !== 'auto') { + idx = filteredGpuEncoders.findIndex(function (device) { return device.encoder.includes(hardwareType); }); + if (idx === -1) { + throw new Error("Could not find encoder ".concat(targetCodec, " for hardware ").concat(hardwareType)); + } + return [2 /*return*/, __assign(__assign({}, filteredGpuEncoders[idx]), { isGpu: true, enabledDevices: [] })]; + } + args.jobLog(JSON.stringify({ filteredGpuEncoders: filteredGpuEncoders })); + _i = 0, filteredGpuEncoders_1 = filteredGpuEncoders; + _d.label = 1; + case 1: + if (!(_i < filteredGpuEncoders_1.length)) return [3 /*break*/, 4]; + gpuEncoder = filteredGpuEncoders_1[_i]; + // eslint-disable-next-line no-await-in-loop + _c = gpuEncoder; + return [4 /*yield*/, (0, exports.hasEncoder)({ + ffmpegPath: args.ffmpegPath, + encoder: gpuEncoder.encoder, + inputArgs: gpuEncoder.inputArgs, + outputArgs: gpuEncoder.outputArgs, + filter: gpuEncoder.filter, + args: args, + })]; + case 2: + // eslint-disable-next-line no-await-in-loop + _c.enabled = _d.sent(); + _d.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + enabledDevices = filteredGpuEncoders.filter(function (device) { return device.enabled === true; }); + args.jobLog(JSON.stringify({ enabledDevices: enabledDevices })); + if (enabledDevices.length > 0) { + if (enabledDevices[0].encoder.includes('nvenc')) { + res = (0, exports.getBestNvencDevice)({ + args: args, + nvencDevice: enabledDevices[0], + }); + return [2 /*return*/, __assign(__assign({}, res), { isGpu: true, enabledDevices: enabledDevices })]; + } + return [2 /*return*/, { + encoder: enabledDevices[0].encoder, + inputArgs: enabledDevices[0].inputArgs, + outputArgs: enabledDevices[0].outputArgs, + isGpu: true, + enabledDevices: enabledDevices, + }]; + } + return [3 /*break*/, 6]; + case 5: + if (!hardwareEncoding) { + args.jobLog('Hardware encoding is disabled in plugin input options'); + } + if (!args.workerType || !args.workerType.includes('gpu')) { + args.jobLog('Worker type is not GPU'); + } + if (!supportedGpuEncoders.includes(targetCodec)) { + args.jobLog("Target codec ".concat(targetCodec, " is not supported for GPU encoding")); + } + _d.label = 6; + case 6: + if (targetCodec === 'hevc') { + return [2 /*return*/, { + encoder: 'libx265', inputArgs: [], outputArgs: [], - filter: '', - }, - { - encoder: 'av1_vaapi', - enabled: false, + isGpu: false, + enabledDevices: [], + }]; + } + if (targetCodec === 'h264') { + return [2 /*return*/, { + encoder: 'libx264', inputArgs: [], outputArgs: [], - filter: '', - }, - ]; - filteredGpuEncoders = gpuEncoders.filter(function (device) { return encoderFilter(device.encoder, targetCodec); }); - if (hardwareEncoding && hardwareType !== 'auto') { - idx = filteredGpuEncoders.findIndex(function (device) { return device.encoder.includes(hardwareType); }); - if (idx === -1) { - throw new Error("Could not find encoder ".concat(targetCodec, " for hardware ").concat(hardwareType)); - } - return [2 /*return*/, __assign(__assign({}, filteredGpuEncoders[idx]), { isGpu: true, enabledDevices: [] })]; - } - args.jobLog(JSON.stringify({ filteredGpuEncoders: filteredGpuEncoders })); - _i = 0, filteredGpuEncoders_1 = filteredGpuEncoders; - _c.label = 1; - case 1: - if (!(_i < filteredGpuEncoders_1.length)) return [3 /*break*/, 4]; - gpuEncoder = filteredGpuEncoders_1[_i]; - // eslint-disable-next-line no-await-in-loop - _b = gpuEncoder; - return [4 /*yield*/, (0, exports.hasEncoder)({ - ffmpegPath: args.ffmpegPath, - encoder: gpuEncoder.encoder, - inputArgs: gpuEncoder.inputArgs, - outputArgs: gpuEncoder.outputArgs, - filter: gpuEncoder.filter, - args: args, - })]; - case 2: - // eslint-disable-next-line no-await-in-loop - _b.enabled = _c.sent(); - _c.label = 3; - case 3: - _i++; - return [3 /*break*/, 1]; - case 4: - enabledDevices = filteredGpuEncoders.filter(function (device) { return device.enabled === true; }); - args.jobLog(JSON.stringify({ enabledDevices: enabledDevices })); - if (enabledDevices.length > 0) { - if (enabledDevices[0].encoder.includes('nvenc')) { - res = (0, exports.getBestNvencDevice)({ - args: args, - nvencDevice: enabledDevices[0], - }); - return [2 /*return*/, __assign(__assign({}, res), { isGpu: true, enabledDevices: enabledDevices })]; - } - return [2 /*return*/, { - encoder: enabledDevices[0].encoder, - inputArgs: enabledDevices[0].inputArgs, - outputArgs: enabledDevices[0].outputArgs, - isGpu: true, - enabledDevices: enabledDevices, - }]; - } - return [3 /*break*/, 6]; - case 5: - if (!hardwareEncoding) { - args.jobLog('Hardware encoding is disabled in plugin input options'); - } - if (!args.workerType || !args.workerType.includes('gpu')) { - args.jobLog('Worker type is not GPU'); - } - if (!supportedGpuEncoders.includes(targetCodec)) { - args.jobLog("Target codec ".concat(targetCodec, " is not supported for GPU encoding")); - } - _c.label = 6; - case 6: - if (targetCodec === 'hevc') { - return [2 /*return*/, { - encoder: 'libx265', - inputArgs: [], - outputArgs: [], - isGpu: false, - enabledDevices: [], - }]; - } - if (targetCodec === 'h264') { - return [2 /*return*/, { - encoder: 'libx264', - inputArgs: [], - outputArgs: [], - isGpu: false, - enabledDevices: [], - }]; - } - if (targetCodec === 'av1') { - return [2 /*return*/, { - encoder: 'libsvtav1', - inputArgs: [], - outputArgs: [], - isGpu: false, - enabledDevices: [], - }]; - } + isGpu: false, + enabledDevices: [], + }]; + } + if (targetCodec === 'av1') { return [2 /*return*/, { - encoder: targetCodec, + encoder: 'libsvtav1', inputArgs: [], outputArgs: [], isGpu: false, enabledDevices: [], }]; - } - }); + } + return [2 /*return*/, { + encoder: targetCodec, + inputArgs: [], + outputArgs: [], + isGpu: false, + enabledDevices: [], + }]; + } }); -}; +}); }; exports.getEncoder = getEncoder;