parent
cfd6c1b29b
commit
22836757cb
@ -0,0 +1,125 @@
|
|||||||
|
import { promises as fsp } from 'fs';
|
||||||
|
import {
|
||||||
|
IpluginDetails,
|
||||||
|
IpluginInputArgs,
|
||||||
|
IpluginOutputArgs,
|
||||||
|
} from '../../../../FlowHelpers/1.0.0/interfaces/interfaces';
|
||||||
|
import normJoinPath from '../../../../FlowHelpers/1.0.0/normJoinPath';
|
||||||
|
|
||||||
|
const helperText = `
|
||||||
|
jobCache: Clears all other files in this job's cache folder (which is a subfolder of the library cache).
|
||||||
|
libraryCache: Clears all other files in the library cache.
|
||||||
|
`;
|
||||||
|
|
||||||
|
/* eslint no-plusplus: ["error", { "allowForLoopAfterthoughts": true }] */
|
||||||
|
const details = (): IpluginDetails => ({
|
||||||
|
name: 'Clear Cache',
|
||||||
|
description: `
|
||||||
|
This plugin allows you to clear various cache folders, keeping only the current 'working' file.
|
||||||
|
${helperText}
|
||||||
|
|
||||||
|
`,
|
||||||
|
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
|
||||||
|
${helperText}
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
outputs: [
|
||||||
|
{
|
||||||
|
number: 1,
|
||||||
|
tooltip: 'Continue to next plugin',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
const plugin = async (args: IpluginInputArgs): Promise<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 { cacheToClear } = args.inputs;
|
||||||
|
|
||||||
|
const currentFile = args.inputFileObj._id;
|
||||||
|
const jobCacheDir = args.workDir;
|
||||||
|
const libraryCacheDir = args.librarySettings.cache;
|
||||||
|
|
||||||
|
let folderToClear = '';
|
||||||
|
|
||||||
|
if (cacheToClear === 'jobCache') {
|
||||||
|
folderToClear = jobCacheDir;
|
||||||
|
} else if (cacheToClear === 'libraryCache') {
|
||||||
|
folderToClear = libraryCacheDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
args.jobLog(`Clearing ${cacheToClear} folder: "${folderToClear}"`);
|
||||||
|
args.jobLog(`Keeping current file: "${currentFile}"`);
|
||||||
|
|
||||||
|
const traverseFolder = async (dir:string) => {
|
||||||
|
const filesInDir = (await fsp.readdir(dir)).map((file) => normJoinPath({
|
||||||
|
upath: args.deps.upath,
|
||||||
|
paths: [
|
||||||
|
dir,
|
||||||
|
file,
|
||||||
|
],
|
||||||
|
}));
|
||||||
|
|
||||||
|
for (let i = 0; i < filesInDir.length; i += 1) {
|
||||||
|
const file = filesInDir[i];
|
||||||
|
|
||||||
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
const stat = await fsp.stat(file);
|
||||||
|
|
||||||
|
if (stat.isDirectory()) {
|
||||||
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
await traverseFolder(file);
|
||||||
|
} else if (
|
||||||
|
file !== currentFile
|
||||||
|
// prevent deleting non Tdarr cache files
|
||||||
|
&& file.includes('tdarr-workDir2')
|
||||||
|
) {
|
||||||
|
args.jobLog(`Deleting "${file}"`);
|
||||||
|
try {
|
||||||
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
await fsp.unlink(file);
|
||||||
|
} catch (err) {
|
||||||
|
args.jobLog(`File delete error: ${JSON.stringify(err)}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
await traverseFolder(folderToClear);
|
||||||
|
|
||||||
|
return {
|
||||||
|
outputFileObj: args.inputFileObj,
|
||||||
|
outputNumber: 1,
|
||||||
|
variables: args.variables,
|
||||||
|
};
|
||||||
|
};
|
||||||
|
export {
|
||||||
|
details,
|
||||||
|
plugin,
|
||||||
|
};
|
||||||
Loading…
Reference in new issue