Merge branch 'master' into pr/723

This commit is contained in:
HaveAGitGat 2025-02-05 17:36:54 +00:00
commit 049d4ec38c
17 changed files with 579 additions and 46 deletions

View file

@ -0,0 +1,169 @@
"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 = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["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 };
}
};
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 = require("fs");
var normJoinPath_1 = __importDefault(require("../../../../FlowHelpers/1.0.0/normJoinPath"));
var helperText = "\n jobCache: Clears all other files in this job's cache folder (which is a subfolder of the library cache).\n libraryCache: Clears all other files in the library cache.\n ";
/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */
var details = function () { return ({
name: 'Clear Cache',
description: "\n This plugin allows you to clear various cache folders, keeping only the current 'working' file.\n ".concat(helperText, "\n\n "),
style: {
borderColor: 'red',
},
tags: '',
isStartPlugin: false,
pType: '',
requiresVersion: '2.11.01',
sidebarPosition: -1,
icon: 'faTrash',
inputs: [
{
label: 'Cache To Clear',
name: 'cacheToClear',
type: 'string',
defaultValue: 'jobCache',
inputUI: {
type: 'dropdown',
options: [
'jobCache',
'libraryCache',
],
},
tooltip: "Specify which cache to clear \n ".concat(helperText, "\n "),
},
],
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, cacheToClear, currentFile, jobCacheDir, libraryCacheDir, folderToClear, traverseFolder;
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);
cacheToClear = args.inputs.cacheToClear;
currentFile = args.inputFileObj._id;
jobCacheDir = args.workDir;
libraryCacheDir = args.librarySettings.cache;
folderToClear = '';
if (cacheToClear === 'jobCache') {
folderToClear = jobCacheDir;
}
else if (cacheToClear === 'libraryCache') {
folderToClear = libraryCacheDir;
}
args.jobLog("Clearing ".concat(cacheToClear, " folder: \"").concat(folderToClear, "\""));
args.jobLog("Keeping current file: \"".concat(currentFile, "\""));
traverseFolder = function (dir) { return __awaiter(void 0, void 0, void 0, function () {
var filesInDir, i, file, stat, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fs_1.promises.readdir(dir)];
case 1:
filesInDir = (_a.sent()).map(function (file) { return (0, normJoinPath_1.default)({
upath: args.deps.upath,
paths: [
dir,
file,
],
}); });
i = 0;
_a.label = 2;
case 2:
if (!(i < filesInDir.length)) return [3 /*break*/, 10];
file = filesInDir[i];
return [4 /*yield*/, fs_1.promises.stat(file)];
case 3:
stat = _a.sent();
if (!stat.isDirectory()) return [3 /*break*/, 5];
// eslint-disable-next-line no-await-in-loop
return [4 /*yield*/, traverseFolder(file)];
case 4:
// eslint-disable-next-line no-await-in-loop
_a.sent();
return [3 /*break*/, 9];
case 5:
if (!(file !== currentFile
// prevent deleting non Tdarr cache files
&& file.includes('tdarr-workDir2'))) return [3 /*break*/, 9];
args.jobLog("Deleting \"".concat(file, "\""));
_a.label = 6;
case 6:
_a.trys.push([6, 8, , 9]);
// eslint-disable-next-line no-await-in-loop
return [4 /*yield*/, fs_1.promises.unlink(file)];
case 7:
// eslint-disable-next-line no-await-in-loop
_a.sent();
return [3 /*break*/, 9];
case 8:
err_1 = _a.sent();
args.jobLog("File delete error: ".concat(JSON.stringify(err_1)));
return [3 /*break*/, 9];
case 9:
i += 1;
return [3 /*break*/, 2];
case 10: return [2 /*return*/];
}
});
}); };
return [4 /*yield*/, traverseFolder(folderToClear)];
case 1:
_a.sent();
return [2 /*return*/, {
outputFileObj: args.inputFileObj,
outputNumber: 1,
variables: args.variables,
}];
}
});
}); };
exports.plugin = plugin;

View file

@ -1,4 +1,5 @@
"use strict";
/* eslint-disable max-len */
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) {
@ -57,7 +58,7 @@ var details = function () { return ({
label: 'JS Code',
name: 'code',
type: 'string',
defaultValue: "\nmodule.exports = async (args) => {\n\n// do something here\n\n return {\n outputFileObj: args.inputFileObj,\n outputNumber: 1,\n variables: args.variables,\n };\n}\n ",
defaultValue: "\nmodule.exports = async (args) => {\n\n// see args object data here https://github.com/HaveAGitGat/Tdarr_Plugins/blob/master/FlowPluginsTs/FlowHelpers/1.0.0/interfaces/interfaces.ts\n// example setting flow variable: https://github.com/HaveAGitGat/Tdarr/issues/1147#issuecomment-2593348443\n// example reading ffmpeg metadata: https://github.com/HaveAGitGat/Tdarr_Plugins/issues/737#issuecomment-2581536112\n// example setting working file as previous working file: https://github.com/HaveAGitGat/Tdarr/issues/1106#issuecomment-2622177459\n\n// some example file data:\nconsole.log(args.inputFileObj._id)\nconsole.log(args.inputFileObj.file_size)\nconsole.log(args.inputFileObj.ffProbeData.streams[0].codec_name)\nconsole.log(args.inputFileObj.mediaInfo.track[0].BitRate)\n\n// access global variable:\nconsole.log(args.userVariables.global.test)\n// access library variable:\nconsole.log(args.userVariables.library.test)\n\n\n\n// do something here\n\n return {\n outputFileObj: args.inputFileObj,\n outputNumber: 1,\n variables: args.variables,\n };\n}\n ",
inputUI: {
type: 'textarea',
style: {

View file

@ -0,0 +1,36 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.plugin = exports.details = void 0;
/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */
var details = function () { return ({
name: 'Remove From Tdarr',
description: "\n If this plugin is executed, then when the flow ends, the item will be \n removed from the Tdarr database and won't appear in Transcode Success or Error tables on the 'Tdarr' tab.\n Use the 'Delete File' plugin if you would like to delete the file from disk.\n ",
style: {
borderColor: 'red',
},
tags: '',
isStartPlugin: false,
pType: '',
requiresVersion: '2.31.01',
sidebarPosition: -1,
icon: 'faTrash',
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) {
// eslint-disable-next-line no-param-reassign
args.variables.removeFromTdarr = true;
return {
outputFileObj: args.inputFileObj,
outputNumber: 1,
variables: args.variables,
};
};
exports.plugin = plugin;

View file

@ -103,6 +103,16 @@ var details = function () { return ({
},
tooltip: 'Specify request body',
},
{
label: 'Log Response Body',
name: 'logResponseBody',
type: 'boolean',
defaultValue: 'false',
inputUI: {
type: 'switch',
},
tooltip: 'Specify whether to log response body in the job report',
},
],
outputs: [
{
@ -114,7 +124,7 @@ var details = function () { return ({
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, method, requestUrl, requestHeaders, requestBody, requestConfig, res, err_1;
var lib, method, requestUrl, requestHeaders, requestBody, logResponseBody, requestConfig, res, err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
@ -125,6 +135,7 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function
requestUrl = String(args.inputs.requestUrl);
requestHeaders = JSON.parse(String(args.inputs.requestHeaders));
requestBody = JSON.parse(String(args.inputs.requestBody));
logResponseBody = args.inputs.logResponseBody;
requestConfig = {
method: method,
url: requestUrl,
@ -138,6 +149,9 @@ var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function
case 2:
res = _a.sent();
args.jobLog("Web request succeeded: Status Code: ".concat(res.status));
if (logResponseBody) {
args.jobLog("Response Body: ".concat(JSON.stringify(res.data)));
}
return [3 /*break*/, 4];
case 3:
err_1 = _a.sent();