Update Tdarr_Plugin_rename_based_on_codec_schadi.js

fixed additonal file handling
make-only-subtitle-default
Stefan 2 years ago committed by GitHub
parent 35710816ae
commit a0273d3417
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,5 +1,6 @@
const loadDefaultValues = require('../methods/loadDefaultValues'); const loadDefaultValues = require('../methods/loadDefaultValues');
const fs = require('fs'); const fs = require('fs');
const path = require('path');
const details = () => { const details = () => {
return { return {
@ -53,17 +54,30 @@ const details = () => {
name: 'additional_extensions', name: 'additional_extensions',
type: 'text', type: 'text',
defaultValue: '.nfo,.srt', defaultValue: '.nfo,.srt',
inputUI: {
type: 'text',
},
tooltip: `Additional file extensions to rename (comma-separated). tooltip: `Additional file extensions to rename (comma-separated).
\\nExample:\\n \\nExample:\\n
.nfo,.srt`, .nfo,.srt`,
}, },
], ],
}; };
}; };
const plugin = (file, librarySettings, inputs, otherArguments) => { const plugin = (file, librarySettings, inputs, otherArguments) => {
inputs = loadDefaultValues(inputs, details); inputs = loadDefaultValues(inputs, details);
const fileNameOld = file._id; const fileNameOld = file._id;
var response = {
file,
removeFromDB: false,
updateDB: true,
infoLog: "",
processFile: false,
};
const codecMap = { const codecMap = {
'aac': 'AAC', 'aac': 'AAC',
@ -121,64 +135,69 @@ const plugin = (file, librarySettings, inputs, otherArguments) => {
file.file = file.file.replace(audioCodecRegex, renamedCodec); file.file = file.file.replace(audioCodecRegex, renamedCodec);
} }
} }
let additionalFilesCount = 0; // Counter for additional files found
if ((audioStream && inputs.rename_audio) || (videoStream && inputs.rename_video)) {
const filename = path.basename(fileNameOld);
const JustName = path.parse(filename).name;
const popJustnamen = JustName.split('.');
popJustnamen.splice(popJustnamen.length - 5);
const modJustname = popJustnamen.join('.');
const fileDir = path.dirname(fileNameOld);
const directoryPath = fileDir;
const additionalExtensions = inputs.additional_extensions.split(',');
let fileList = []; // Array to store the file names
const files = fs.readdirSync(directoryPath);
files.forEach((supportFile) => {
fileList.push(supportFile); // Add all files to the fileList array
});
var filename = fileNameOld.replace(/^.*[\\\/]/, ''); const extensionList = additionalExtensions.map(extension => extension.trim()); // Remove leading/trailing spaces from extensions
var JustName = filename.split('.'); const regex = new RegExp(`(${extensionList.join('|')})$`, 'i');
JustName.pop();
JustName = JustName.join('.').toString(); files.forEach((supportFile) => {
if (supportFile.startsWith(modJustname) && regex.test(supportFile)) {
const fileDir = fileNameOld.split('/'); const renamedFileWithVideoCodec = supportFile.replace(videoCodecRegex, codecMap[firstVideoStreamCodec]);
fileDir.pop(); const renamedFileWithBothCodecs = renamedFileWithVideoCodec.replace(audioCodecRegex, codecMap[firstAudioStreamCodec]);
const directoryPath = fileDir.join('/');
fs.renameSync(`${directoryPath}/${supportFile}`, `${directoryPath}/${renamedFileWithBothCodecs}`, {
const additionalExtensions = inputs.additional_extensions overwrite: true,
.split(/[,;/]/) });
.map(extension => extension.trim())
.filter(extension => extension !== ''); response.infoLog += `${directoryPath}/${supportFile} renamed to ${directoryPath}/${renamedFileWithBothCodecs}\n`;
additionalFilesCount++; // Increment the count for each additional file found
additionalExtensions.forEach(extension => { }
const regex = new RegExp(`${JustName}.*${extension}`, 'i');
const files = fs.readdirSync(directoryPath);
files.forEach((supportFile) => {
if (regex.test(supportFile)) {
const renamedFile = supportFile.replace(regex, (match, p1, p2) => {
const additionalFileName = match;
const renamedVideoCodec = codecMap[firstVideoStreamCodec];
const renamedAudioCodec = codecMap[firstAudioStreamCodec];
const renamedFileWithCodecs = additionalFileName
.replace(videoCodecRegex, renamedVideoCodec)
.replace(audioCodecRegex, renamedAudioCodec);
return renamedFileWithCodecs;
});
fs.renameSync(`${directoryPath}/${supportFile}`, `${directoryPath}/${renamedFile}`, {
overwrite: true,
});
}
});
}); });
//const textFilePath = path.join(directoryPath, `${modJustname}.txt`);
//fs.writeFileSync(textFilePath, fileList.filter(file => file.startsWith(modJustname) && regex.test(file)).join('\n'), 'utf-8');
}
if (fileNameOld !== file._id) { if (fileNameOld !== file._id) {
fs.renameSync(fileNameOld, file._id, { fs.renameSync(fileNameOld, file._id, {
overwrite: true, overwrite: true,
}); });
response.infoLog += `Renamed file to: ${file._id}\n`
const response = { if (additionalFilesCount > 0) {
file, response.infoLog += `and: ${additionalFilesCount} additional Files!\n`;
removeFromDB: false, }
updateDB: true,
};
return response; return response;
} else {
return {
processFile: true,
infoLog: `Renamed file and associated files to: ${file._id}`,
};
} }
else {
response.infoLog += `Video File not renamed!\n`
if (additionalFilesCount > 0) {
response.infoLog += `But: ${additionalFilesCount} additional Files!\n`;
}
return response;
}
}; };
module.exports.details = details; module.exports.details = details;

Loading…
Cancel
Save