diff --git a/FlowPlugins/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.js index c5a21c1..e303899 100644 --- a/FlowPlugins/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.js @@ -100,7 +100,7 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function lra = args.inputs.lra; tp = args.inputs.tp; container = (0, fileUtils_1.getContainer)(args.inputFileObj._id); - outputFilePath = "".concat(args.workDir, "/tempFile_").concat(new Date().getTime(), ".").concat(container); + outputFilePath = "".concat((0, fileUtils_1.getPluginWorkDir)(args), "/").concat((0, fileUtils_1.getFileName)(args.inputFileObj._id), ".").concat(container); normArgs1 = [ '-i', args.inputFileObj._id, diff --git a/FlowPlugins/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.js index d2e5320..805a212 100644 --- a/FlowPlugins/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.js @@ -109,7 +109,7 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function + 'Please use the Run Classic Transcode Flow Plugin plugin instead.'); } container = (0, fileUtils_1.getContainer)(args.inputFileObj._id); - cacheFilePath = "".concat(args.workDir, "/tempFile_").concat(new Date().getTime(), ".").concat(container); + cacheFilePath = "".concat((0, fileUtils_1.getPluginWorkDir)(args), "/").concat((0, fileUtils_1.getFileName)(args.inputFileObj._id), ".").concat(container); otherArguments = { handbrakePath: args.handbrakePath, ffmpegPath: args.ffmpegPath, diff --git a/FlowPlugins/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.js index 26ff999..7864635 100644 --- a/FlowPlugins/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.js @@ -121,7 +121,7 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function + 'Please use the Run Classic Filter Flow Plugin plugin instead.'); } container = (0, fileUtils_1.getContainer)(args.inputFileObj._id); - cacheFilePath = "".concat(args.workDir, "/tempFile_").concat(new Date().getTime(), ".").concat(container); + cacheFilePath = "".concat((0, fileUtils_1.getPluginWorkDir)(args), "/").concat((0, fileUtils_1.getFileName)(args.inputFileObj._id), ".").concat(container); otherArguments = { handbrakePath: args.handbrakePath, ffmpegPath: args.ffmpegPath, diff --git a/FlowPlugins/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.js index 9698d8f..4d6d0e5 100644 --- a/FlowPlugins/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.js @@ -47,6 +47,7 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { Object.defineProperty(exports, "__esModule", { value: true }); exports.plugin = exports.details = void 0; var cliUtils_1 = require("../../../../FlowHelpers/1.0.0/cliUtils"); +var fileUtils_1 = require("../../../../FlowHelpers/1.0.0/fileUtils"); /* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ var details = function () { return ({ name: 'Execute', @@ -147,7 +148,8 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function } idx = cliArgs.indexOf('-i'); cliArgs.splice.apply(cliArgs, __spreadArray([idx, 0], inputArgs, false)); - outputFilePath = "".concat(args.workDir, "/tempFile_").concat(new Date().getTime(), ".").concat(args.variables.ffmpegCommand.container); + outputFilePath = "".concat((0, fileUtils_1.getPluginWorkDir)(args), "/").concat((0, fileUtils_1.getFileName)(args.inputFileObj._id)) + + ".".concat(args.variables.ffmpegCommand.container); cliArgs.push(outputFilePath); args.jobLog('Processing file'); args.jobLog(JSON.stringify({ diff --git a/FlowPlugins/CommunityFlowPlugins/file/checkFileExists/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/checkFileExists/1.0.0/index.js new file mode 100644 index 0000000..b9add34 --- /dev/null +++ b/FlowPlugins/CommunityFlowPlugins/file/checkFileExists/1.0.0/index.js @@ -0,0 +1,80 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.plugin = exports.details = void 0; +var fs_1 = __importDefault(require("fs")); +var fileUtils_1 = require("../../../../FlowHelpers/1.0.0/fileUtils"); +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +var details = function () { return ({ + name: 'Check File Exists', + description: 'Check file Exists', + style: { + borderColor: 'orange', + }, + tags: 'video', + isStartPlugin: false, + sidebarPosition: -1, + icon: 'faQuestion', + inputs: [ + { + name: 'fileToCheck', + type: 'string', + // eslint-disable-next-line no-template-curly-in-string + defaultValue: '${fileName}_720p.${container}', + inputUI: { + type: 'text', + }, + // eslint-disable-next-line no-template-curly-in-string + tooltip: 'Specify file to check using templating e.g. ${fileName}_720p.${container}', + }, + { + name: 'directory', + type: 'string', + defaultValue: '', + inputUI: { + type: 'directory', + }, + tooltip: 'Specify directory to check. Leave blank to use working directory.' + + ' Put below Input File plugin to check original file directory.', + }, + ], + outputs: [ + { + number: 1, + tooltip: 'File exists', + }, + { + number: 2, + tooltip: 'File does not exist', + }, + ], +}); }; +exports.details = details; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var plugin = function (args) { + var lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + var directory = String(args.inputs.directory).trim() || (0, fileUtils_1.getFileAbosluteDir)(args.inputFileObj._id); + var fileName = (0, fileUtils_1.getFileName)(args.inputFileObj._id); + var fileToCheck = String(args.inputs.fileToCheck).trim(); + fileToCheck = fileToCheck.replace(/\${fileName}/g, fileName); + fileToCheck = fileToCheck.replace(/\${container}/g, (0, fileUtils_1.getContainer)(args.inputFileObj._id)); + fileToCheck = "".concat(directory, "/").concat(fileToCheck); + var fileExists = false; + if (fs_1.default.existsSync(fileToCheck)) { + fileExists = true; + args.jobLog("File exists: ".concat(fileToCheck)); + } + else { + args.jobLog("File does not exist: ".concat(fileToCheck)); + } + return { + outputFileObj: args.inputFileObj, + outputNumber: fileExists ? 1 : 2, + variables: args.variables, + }; +}; +exports.plugin = plugin; diff --git a/FlowPlugins/CommunityFlowPlugins/file/checkFileNameIncludes/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/checkFileNameIncludes/1.0.0/index.js new file mode 100644 index 0000000..3ad9a37 --- /dev/null +++ b/FlowPlugins/CommunityFlowPlugins/file/checkFileNameIncludes/1.0.0/index.js @@ -0,0 +1,61 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.plugin = exports.details = void 0; +var fileUtils_1 = require("../../../../FlowHelpers/1.0.0/fileUtils"); +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +var details = function () { return ({ + name: 'Check File Name Includes', + description: 'Check if a file name includes specific terms. Only needs to match one term', + style: { + borderColor: 'orange', + }, + tags: 'video', + isStartPlugin: false, + sidebarPosition: -1, + icon: 'faQuestion', + inputs: [ + { + name: 'terms', + type: 'string', + // eslint-disable-next-line no-template-curly-in-string + defaultValue: '_720p,_1080p', + inputUI: { + type: 'text', + }, + // eslint-disable-next-line no-template-curly-in-string + tooltip: 'Specify terms to check for in file name using comma seperated list e.g. _720p,_1080p', + }, + ], + outputs: [ + { + number: 1, + tooltip: 'File name contains terms', + }, + { + number: 2, + tooltip: 'File name does not contains terms', + }, + ], +}); }; +exports.details = details; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var plugin = function (args) { + var lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + var fileName = "".concat((0, fileUtils_1.getFileName)(args.inputFileObj._id), ".").concat((0, fileUtils_1.getContainer)(args.inputFileObj._id)); + var terms = String(args.inputs.terms).trim().split(','); + var containsTerms = false; + for (var i = 0; i < terms.length; i++) { + if (fileName.includes(terms[i])) { + containsTerms = true; + break; + } + } + return { + outputFileObj: args.inputFileObj, + outputNumber: containsTerms ? 1 : 2, + variables: args.variables, + }; +}; +exports.plugin = plugin; diff --git a/FlowPlugins/CommunityFlowPlugins/file/moveToOriginalDirectory/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/moveToOriginalDirectory/1.0.0/index.js new file mode 100644 index 0000000..69f5fcf --- /dev/null +++ b/FlowPlugins/CommunityFlowPlugins/file/moveToOriginalDirectory/1.0.0/index.js @@ -0,0 +1,91 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.plugin = exports.details = void 0; +var fileUtils_1 = require("../../../../FlowHelpers/1.0.0/fileUtils"); +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +var details = function () { return ({ + name: 'Move To Original Directory', + description: 'Move working file original directory.', + style: { + borderColor: 'green', + }, + tags: '', + isStartPlugin: false, + sidebarPosition: -1, + icon: 'faArrowRight', + inputs: [], + outputs: [ + { + number: 1, + tooltip: 'Continue to next plugin', + }, + ], +}); }; +exports.details = details; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function () { + var lib, fileName, container, outputDir, ouputFilePath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + fileName = (0, fileUtils_1.getFileName)(args.inputFileObj._id); + container = (0, fileUtils_1.getContainer)(args.inputFileObj._id); + outputDir = (0, fileUtils_1.getFileAbosluteDir)(args.originalLibraryFile._id); + ouputFilePath = "".concat(outputDir, "/").concat(fileName, ".").concat(container); + return [4 /*yield*/, (0, fileUtils_1.moveFileAndValidate)({ + inputPath: args.inputFileObj._id, + outputPath: ouputFilePath, + args: args, + })]; + case 1: + _a.sent(); + return [2 /*return*/, { + outputFileObj: { + _id: ouputFilePath, + }, + outputNumber: 1, + variables: args.variables, + }]; + } + }); +}); }; +exports.plugin = plugin; diff --git a/FlowPlugins/CommunityFlowPlugins/file/renameFile/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/renameFile/1.0.0/index.js new file mode 100644 index 0000000..1fdbbd5 --- /dev/null +++ b/FlowPlugins/CommunityFlowPlugins/file/renameFile/1.0.0/index.js @@ -0,0 +1,105 @@ +"use strict"; +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; +var __generator = (this && this.__generator) || function (thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (g && (g = 0, op[0] && (_ = 0)), _) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.plugin = exports.details = void 0; +var fileUtils_1 = require("../../../../FlowHelpers/1.0.0/fileUtils"); +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +var details = function () { return ({ + name: 'Rename File', + description: 'Rename a file', + style: { + borderColor: 'green', + }, + tags: 'video', + isStartPlugin: false, + sidebarPosition: -1, + icon: '', + inputs: [ + { + name: 'fileRename', + type: 'string', + // eslint-disable-next-line no-template-curly-in-string + defaultValue: '${fileName}_720p.${container}', + inputUI: { + type: 'text', + }, + // eslint-disable-next-line no-template-curly-in-string + tooltip: 'Specify file to check using templating e.g. ${fileName}_720p.${container}', + }, + ], + outputs: [ + { + number: 1, + tooltip: 'Continue to next plugin', + }, + ], +}); }; +exports.details = details; +// eslint-disable-next-line @typescript-eslint/no-unused-vars +var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function () { + var lib, fileName, newName, fileDir, newPath; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + fileName = (0, fileUtils_1.getFileName)(args.inputFileObj._id); + newName = String(args.inputs.fileRename).trim(); + newName = newName.replace(/\${fileName}/g, fileName); + newName = newName.replace(/\${container}/g, (0, fileUtils_1.getContainer)(args.inputFileObj._id)); + fileDir = (0, fileUtils_1.getFileAbosluteDir)(args.inputFileObj._id); + newPath = "".concat(fileDir, "/").concat(newName); + return [4 /*yield*/, (0, fileUtils_1.moveFileAndValidate)({ + inputPath: args.inputFileObj._id, + outputPath: newPath, + args: args, + })]; + case 1: + _a.sent(); + return [2 /*return*/, { + outputFileObj: { + _id: newPath, + }, + outputNumber: 1, + variables: args.variables, + }]; + } + }); +}); }; +exports.plugin = plugin; diff --git a/FlowPlugins/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.js index ca1d8ca..ddd4b2c 100644 --- a/FlowPlugins/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.js @@ -58,16 +58,9 @@ var details = function () { return ({ ], }); }; exports.details = details; -var getNewPath = function (originalPath, tempPath) { - var tempPathParts = tempPath.split('.'); - var container = tempPathParts[tempPathParts.length - 1]; - var originalPathParts = originalPath.split('.'); - originalPathParts[originalPathParts.length - 1] = container; - return originalPathParts.join('.'); -}; // eslint-disable-next-line @typescript-eslint/no-unused-vars var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function () { - var fs, lib, currentPath, newPath, newPathTmp; + var fs, lib, currentPath, orignalFolder, fileName, container, newPath, newPathTmp; return __generator(this, function (_a) { switch (_a.label) { case 0: @@ -86,7 +79,10 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function } args.jobLog('File has changed, replacing original file'); currentPath = args.inputFileObj._id; - newPath = getNewPath(args.originalLibraryFile._id, currentPath); + orignalFolder = (0, fileUtils_1.getFileAbosluteDir)(args.originalLibraryFile._id); + fileName = (0, fileUtils_1.getFileName)(args.inputFileObj._id); + container = (0, fileUtils_1.getContainer)(args.inputFileObj._id); + newPath = "".concat(orignalFolder, "/").concat(fileName, ".").concat(container); newPathTmp = "".concat(newPath, ".tmp"); args.jobLog(JSON.stringify({ currentPath: currentPath, @@ -96,10 +92,6 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })]; case 1: _a.sent(); - // delete temp file - if (fs.existsSync(newPath)) { - fs.unlinkSync(newPath); - } return [4 /*yield*/, (0, fileUtils_1.moveFileAndValidate)({ inputPath: currentPath, outputPath: newPathTmp, @@ -108,7 +100,9 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function case 2: _a.sent(); // delete original file - if (fs.existsSync(args.originalLibraryFile._id)) { + if (fs.existsSync(args.originalLibraryFile._id) + && args.originalLibraryFile._id !== currentPath) { + args.jobLog("Deleting original file:".concat(args.originalLibraryFile._id)); fs.unlinkSync(args.originalLibraryFile._id); } return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 2000); })]; diff --git a/FlowPlugins/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.js index 066e771..64691f8 100644 --- a/FlowPlugins/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.js @@ -112,7 +112,7 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function if (container === 'original') { container = (0, fileUtils_1.getContainer)(args.inputFileObj._id); } - outputFilePath = "".concat(args.workDir, "/tempFile_").concat(new Date().getTime(), ".").concat(container); + outputFilePath = "".concat((0, fileUtils_1.getPluginWorkDir)(args), "/").concat((0, fileUtils_1.getFileName)(args.inputFileObj._id), ".").concat(container); presetString = String(args.inputs.jsonPreset); cliArgs = [ '-i', diff --git a/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js b/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js index 8f1a349..7b0aff3 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js +++ b/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js @@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) { } }; Object.defineProperty(exports, "__esModule", { value: true }); -exports.moveFileAndValidate = exports.getSubStem = exports.getFfType = exports.getFileName = exports.getContainer = void 0; +exports.getPluginWorkDir = exports.moveFileAndValidate = exports.getSubStem = exports.getFfType = exports.getFileAbosluteDir = exports.getFileName = exports.getContainer = void 0; var fs_1 = require("fs"); var getContainer = function (filePath) { var parts = filePath.split('.'); @@ -51,6 +51,12 @@ var getFileName = function (filePath) { return parts2.join('.'); }; exports.getFileName = getFileName; +var getFileAbosluteDir = function (filePath) { + var parts = filePath.split('/'); + parts.pop(); + return parts.join('/'); +}; +exports.getFileAbosluteDir = getFileAbosluteDir; var getFfType = function (codecType) { return (codecType === 'video' ? 'v' : 'a'); }; exports.getFfType = getFfType; var getSubStem = function (_a) { @@ -140,3 +146,9 @@ var moveFileAndValidate = function (_a) { }); }; exports.moveFileAndValidate = moveFileAndValidate; +var getPluginWorkDir = function (args) { + var pluginWorkDir = "".concat(args.workDir, "/").concat(new Date().getTime()); + args.deps.fsextra.ensureDirSync(pluginWorkDir); + return pluginWorkDir; +}; +exports.getPluginWorkDir = getPluginWorkDir; diff --git a/FlowPluginsTs/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.ts index ab09349..caa1558 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/audio/normalizeAudio/1.0.0/index.ts @@ -1,5 +1,5 @@ import { CLI } from '../../../../FlowHelpers/1.0.0/cliUtils'; -import { getContainer } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { getContainer, getFileName, getPluginWorkDir } from '../../../../FlowHelpers/1.0.0/fileUtils'; import { IpluginDetails, IpluginInputArgs, @@ -69,7 +69,7 @@ const plugin = async (args: IpluginInputArgs): Promise => { const { tp } = args.inputs; const container = getContainer(args.inputFileObj._id); - const outputFilePath = `${args.workDir}/tempFile_${new Date().getTime()}.${container}`; + const outputFilePath = `${getPluginWorkDir(args)}/${getFileName(args.inputFileObj._id)}.${container}`; const normArgs1: string[] = [ '-i', diff --git a/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.ts index a8a773e..04c946b 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicFilterPlugin/1.0.0/index.ts @@ -1,4 +1,4 @@ -import { getContainer } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { getContainer, getFileName, getPluginWorkDir } from '../../../../FlowHelpers/1.0.0/fileUtils'; import { IpluginDetails, IpluginInputArgs, @@ -80,7 +80,7 @@ const plugin = async (args: IpluginInputArgs): Promise => { } const container = getContainer(args.inputFileObj._id); - const cacheFilePath = `${args.workDir}/tempFile_${new Date().getTime()}.${container}`; + const cacheFilePath = `${getPluginWorkDir(args)}/${getFileName(args.inputFileObj._id)}.${container}`; const otherArguments = { handbrakePath: args.handbrakePath, diff --git a/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.ts index 0fbd06a..3691765 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/classic/runClassicTranscodePlugin/1.0.0/index.ts @@ -1,5 +1,5 @@ import { CLI } from '../../../../FlowHelpers/1.0.0/cliUtils'; -import { getContainer } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { getContainer, getFileName, getPluginWorkDir } from '../../../../FlowHelpers/1.0.0/fileUtils'; import { IpluginDetails, IpluginInputArgs, @@ -83,7 +83,7 @@ const plugin = async (args: IpluginInputArgs): Promise => { } const container = getContainer(args.inputFileObj._id); - let cacheFilePath = `${args.workDir}/tempFile_${new Date().getTime()}.${container}`; + let cacheFilePath = `${getPluginWorkDir(args)}/${getFileName(args.inputFileObj._id)}.${container}`; const otherArguments = { handbrakePath: args.handbrakePath, diff --git a/FlowPluginsTs/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.ts index b524c16..5895c30 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/ffmpegCommand/ffmpegCommandExecute/1.0.0/index.ts @@ -5,6 +5,7 @@ import { IpluginOutputArgs, } from '../../../../FlowHelpers/1.0.0/interfaces/interfaces'; import { CLI } from '../../../../FlowHelpers/1.0.0/cliUtils'; +import { getFileName, getPluginWorkDir } from '../../../../FlowHelpers/1.0.0/fileUtils'; /* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ const details = (): IpluginDetails => ({ @@ -121,7 +122,9 @@ const plugin = async (args: IpluginInputArgs): Promise => { const idx = cliArgs.indexOf('-i'); cliArgs.splice(idx, 0, ...inputArgs); - const outputFilePath = `${args.workDir}/tempFile_${new Date().getTime()}.${args.variables.ffmpegCommand.container}`; + const outputFilePath = `${getPluginWorkDir(args)}/${getFileName(args.inputFileObj._id)}` + + `.${args.variables.ffmpegCommand.container}`; + cliArgs.push(outputFilePath); args.jobLog('Processing file'); diff --git a/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExists/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExists/1.0.0/index.ts new file mode 100644 index 0000000..bc268ed --- /dev/null +++ b/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExists/1.0.0/index.ts @@ -0,0 +1,87 @@ +import fs from 'fs'; +import { getContainer, getFileAbosluteDir, getFileName } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { + IpluginDetails, + IpluginInputArgs, + IpluginOutputArgs, +} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces'; + +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +const details = (): IpluginDetails => ({ + name: 'Check File Exists', + description: 'Check file Exists', + style: { + borderColor: 'orange', + }, + tags: 'video', + isStartPlugin: false, + sidebarPosition: -1, + icon: 'faQuestion', + inputs: [ + { + name: 'fileToCheck', + type: 'string', + // eslint-disable-next-line no-template-curly-in-string + defaultValue: '${fileName}_720p.${container}', + inputUI: { + type: 'text', + }, + // eslint-disable-next-line no-template-curly-in-string + tooltip: 'Specify file to check using templating e.g. ${fileName}_720p.${container}', + }, + { + name: 'directory', + type: 'string', + defaultValue: '', + inputUI: { + type: 'directory', + }, + tooltip: 'Specify directory to check. Leave blank to use working directory.' + + ' Put below Input File plugin to check original file directory.', + }, + ], + outputs: [ + { + number: 1, + tooltip: 'File exists', + }, + { + number: 2, + tooltip: 'File does not exist', + }, + ], +}); + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const plugin = (args: IpluginInputArgs): IpluginOutputArgs => { + const lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + + const directory = String(args.inputs.directory).trim() || getFileAbosluteDir(args.inputFileObj._id); + + const fileName = getFileName(args.inputFileObj._id); + + let fileToCheck = String(args.inputs.fileToCheck).trim(); + fileToCheck = fileToCheck.replace(/\${fileName}/g, fileName); + fileToCheck = fileToCheck.replace(/\${container}/g, getContainer(args.inputFileObj._id)); + fileToCheck = `${directory}/${fileToCheck}`; + + let fileExists = false; + if (fs.existsSync(fileToCheck)) { + fileExists = true; + args.jobLog(`File exists: ${fileToCheck}`); + } else { + args.jobLog(`File does not exist: ${fileToCheck}`); + } + + return { + outputFileObj: args.inputFileObj, + outputNumber: fileExists ? 1 : 2, + variables: args.variables, + }; +}; +export { + details, + plugin, +}; diff --git a/FlowPluginsTs/CommunityFlowPlugins/file/checkFileNameIncludes/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/file/checkFileNameIncludes/1.0.0/index.ts new file mode 100644 index 0000000..1241372 --- /dev/null +++ b/FlowPluginsTs/CommunityFlowPlugins/file/checkFileNameIncludes/1.0.0/index.ts @@ -0,0 +1,70 @@ +import { getContainer, getFileName } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { + IpluginDetails, + IpluginInputArgs, + IpluginOutputArgs, +} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces'; + +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +const details = (): IpluginDetails => ({ + name: 'Check File Name Includes', + description: 'Check if a file name includes specific terms. Only needs to match one term', + style: { + borderColor: 'orange', + }, + tags: 'video', + isStartPlugin: false, + sidebarPosition: -1, + icon: 'faQuestion', + inputs: [ + { + name: 'terms', + type: 'string', + // eslint-disable-next-line no-template-curly-in-string + defaultValue: '_720p,_1080p', + inputUI: { + type: 'text', + }, + // eslint-disable-next-line no-template-curly-in-string + tooltip: 'Specify terms to check for in file name using comma seperated list e.g. _720p,_1080p', + }, + ], + outputs: [ + { + number: 1, + tooltip: 'File name contains terms', + }, + { + number: 2, + tooltip: 'File name does not contains terms', + }, + ], +}); + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const plugin = (args: IpluginInputArgs): IpluginOutputArgs => { + const lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + + const fileName = `${getFileName(args.inputFileObj._id)}.${getContainer(args.inputFileObj._id)}`; + const terms = String(args.inputs.terms).trim().split(','); + let containsTerms = false; + + for (let i = 0; i < terms.length; i++) { + if (fileName.includes(terms[i])) { + containsTerms = true; + break; + } + } + + return { + outputFileObj: args.inputFileObj, + outputNumber: containsTerms ? 1 : 2, + variables: args.variables, + }; +}; +export { + details, + plugin, +}; diff --git a/FlowPluginsTs/CommunityFlowPlugins/file/moveToOriginalDirectory/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/file/moveToOriginalDirectory/1.0.0/index.ts new file mode 100644 index 0000000..c4f557b --- /dev/null +++ b/FlowPluginsTs/CommunityFlowPlugins/file/moveToOriginalDirectory/1.0.0/index.ts @@ -0,0 +1,60 @@ +import { + getContainer, getFileAbosluteDir, getFileName, moveFileAndValidate, +} from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { + IpluginDetails, + IpluginInputArgs, + IpluginOutputArgs, +} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces'; + +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +const details = ():IpluginDetails => ({ + name: 'Move To Original Directory', + description: 'Move working file original directory.', + style: { + borderColor: 'green', + }, + tags: '', + + isStartPlugin: false, + sidebarPosition: -1, + icon: 'faArrowRight', + inputs: [], + outputs: [ + { + number: 1, + tooltip: 'Continue to next plugin', + }, + ], +}); + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const plugin = async (args:IpluginInputArgs):Promise => { + const lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + + const fileName = getFileName(args.inputFileObj._id); + const container = getContainer(args.inputFileObj._id); + const outputDir = getFileAbosluteDir(args.originalLibraryFile._id); + + const ouputFilePath = `${outputDir}/${fileName}.${container}`; + + await moveFileAndValidate({ + inputPath: args.inputFileObj._id, + outputPath: ouputFilePath, + args, + }); + + return { + outputFileObj: { + _id: ouputFilePath, + }, + outputNumber: 1, + variables: args.variables, + }; +}; +export { + details, + plugin, +}; diff --git a/FlowPluginsTs/CommunityFlowPlugins/file/renameFile/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/file/renameFile/1.0.0/index.ts new file mode 100644 index 0000000..4af3730 --- /dev/null +++ b/FlowPluginsTs/CommunityFlowPlugins/file/renameFile/1.0.0/index.ts @@ -0,0 +1,74 @@ +import { + getContainer, getFileAbosluteDir, getFileName, moveFileAndValidate, +} from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { + IpluginDetails, + IpluginInputArgs, + IpluginOutputArgs, +} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces'; + +/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ +const details = (): IpluginDetails => ({ + name: 'Rename File', + description: 'Rename a file', + style: { + borderColor: 'green', + }, + tags: 'video', + isStartPlugin: false, + sidebarPosition: -1, + icon: '', + inputs: [ + { + name: 'fileRename', + type: 'string', + // eslint-disable-next-line no-template-curly-in-string + defaultValue: '${fileName}_720p.${container}', + inputUI: { + type: 'text', + }, + // eslint-disable-next-line no-template-curly-in-string + tooltip: 'Specify file to check using templating e.g. ${fileName}_720p.${container}', + }, + ], + outputs: [ + { + number: 1, + tooltip: 'Continue to next plugin', + }, + ], +}); + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const plugin = async (args: IpluginInputArgs): Promise => { + const lib = require('../../../../../methods/lib')(); + // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign + args.inputs = lib.loadDefaultValues(args.inputs, details); + + const fileName = getFileName(args.inputFileObj._id); + + let newName = String(args.inputs.fileRename).trim(); + newName = newName.replace(/\${fileName}/g, fileName); + newName = newName.replace(/\${container}/g, getContainer(args.inputFileObj._id)); + + const fileDir = getFileAbosluteDir(args.inputFileObj._id); + const newPath = `${fileDir}/${newName}`; + + await moveFileAndValidate({ + inputPath: args.inputFileObj._id, + outputPath: newPath, + args, + }); + + return { + outputFileObj: { + _id: newPath, + }, + outputNumber: 1, + variables: args.variables, + }; +}; +export { + details, + plugin, +}; diff --git a/FlowPluginsTs/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.ts index f38e7f6..18176a1 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/file/replaceOriginalFile/1.0.0/index.ts @@ -1,4 +1,6 @@ -import { moveFileAndValidate } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { + getContainer, getFileAbosluteDir, getFileName, moveFileAndValidate, +} from '../../../../FlowHelpers/1.0.0/fileUtils'; import { IpluginDetails, IpluginInputArgs, @@ -25,16 +27,6 @@ const details = (): IpluginDetails => ({ ], }); -const getNewPath = (originalPath: string, tempPath: string) => { - const tempPathParts = tempPath.split('.'); - const container = tempPathParts[tempPathParts.length - 1]; - - const originalPathParts = originalPath.split('.'); - - originalPathParts[originalPathParts.length - 1] = container; - return originalPathParts.join('.'); -}; - // eslint-disable-next-line @typescript-eslint/no-unused-vars const plugin = async (args: IpluginInputArgs): Promise => { const fs = require('fs'); @@ -57,7 +49,11 @@ const plugin = async (args: IpluginInputArgs): Promise => { args.jobLog('File has changed, replacing original file'); const currentPath = args.inputFileObj._id; - const newPath = getNewPath(args.originalLibraryFile._id, currentPath); + const orignalFolder = getFileAbosluteDir(args.originalLibraryFile._id); + const fileName = getFileName(args.inputFileObj._id); + const container = getContainer(args.inputFileObj._id); + + const newPath = `${orignalFolder}/${fileName}.${container}`; const newPathTmp = `${newPath}.tmp`; args.jobLog(JSON.stringify({ @@ -68,11 +64,6 @@ const plugin = async (args: IpluginInputArgs): Promise => { await new Promise((resolve) => setTimeout(resolve, 2000)); - // delete temp file - if (fs.existsSync(newPath)) { - fs.unlinkSync(newPath); - } - await moveFileAndValidate({ inputPath: currentPath, outputPath: newPathTmp, @@ -80,7 +71,11 @@ const plugin = async (args: IpluginInputArgs): Promise => { }); // delete original file - if (fs.existsSync(args.originalLibraryFile._id)) { + if ( + fs.existsSync(args.originalLibraryFile._id) + && args.originalLibraryFile._id !== currentPath + ) { + args.jobLog(`Deleting original file:${args.originalLibraryFile._id}`); fs.unlinkSync(args.originalLibraryFile._id); } diff --git a/FlowPluginsTs/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.ts index b5485dc..63dab42 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/handbrake/handbrakeCustomArguments/1.0.0/index.ts @@ -5,7 +5,7 @@ import { IpluginInputArgs, IpluginOutputArgs, } from '../../../../FlowHelpers/1.0.0/interfaces/interfaces'; -import { getContainer } from '../../../../FlowHelpers/1.0.0/fileUtils'; +import { getContainer, getFileName, getPluginWorkDir } from '../../../../FlowHelpers/1.0.0/fileUtils'; /* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */ const details = ():IpluginDetails => ({ @@ -79,7 +79,7 @@ const plugin = async (args:IpluginInputArgs):Promise => { container = getContainer(args.inputFileObj._id); } - const outputFilePath = `${args.workDir}/tempFile_${new Date().getTime()}.${container}`; + const outputFilePath = `${getPluginWorkDir(args)}/${getFileName(args.inputFileObj._id)}.${container}`; const presetString = String(args.inputs.jsonPreset); diff --git a/FlowPluginsTs/FlowHelpers/1.0.0/fileUtils.ts b/FlowPluginsTs/FlowHelpers/1.0.0/fileUtils.ts index d0d615c..b6f8359 100644 --- a/FlowPluginsTs/FlowHelpers/1.0.0/fileUtils.ts +++ b/FlowPluginsTs/FlowHelpers/1.0.0/fileUtils.ts @@ -14,6 +14,12 @@ export const getFileName = (filePath: string): string => { return parts2.join('.'); }; +export const getFileAbosluteDir = (filePath: string):string => { + const parts = filePath.split('/'); + parts.pop(); + return parts.join('/'); +}; + export const getFfType = (codecType: string): string => (codecType === 'video' ? 'v' : 'a'); export const getSubStem = ({ @@ -92,3 +98,9 @@ export const moveFileAndValidate = async ({ } } }; + +export const getPluginWorkDir = (args: IpluginInputArgs):string => { + const pluginWorkDir = `${args.workDir}/${new Date().getTime()}`; + args.deps.fsextra.ensureDirSync(pluginWorkDir); + return pluginWorkDir; +};