Merge pull request #408 from HaveAGitGat/norm_adjust

Poll server for job report and add optional server ip/port inputs
make-only-subtitle-default
HaveAGitGat 3 years ago committed by GitHub
commit e556c4345c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,4 +1,4 @@
/* eslint-disable no-unused-vars */ /* eslint-disable no-unused-vars, no-await-in-loop */
module.exports.dependencies = ['axios@0.27.2']; module.exports.dependencies = ['axios@0.27.2'];
// PLugin runs multipass loudnorm filter // PLugin runs multipass loudnorm filter
@ -57,6 +57,25 @@ Output will be MKV to allow metadata to be added for tracking normalisation stag
tooltip: `Desired "tp" value. \\n Defaults to -2.0 tooltip: `Desired "tp" value. \\n Defaults to -2.0
`, `,
}, },
{
name: 'serverIp',
type: 'string',
defaultValue: '',
inputUI: {
type: 'text',
},
tooltip: 'Enter the IP address of the server if plugin having trouble connecting.',
},
{
name: 'serverPort',
type: 'string',
defaultValue: '',
inputUI: {
type: 'text',
},
tooltip: 'Enter the port number of the server if plugin having trouble connecting.',
},
], ],
}); });
@ -69,79 +88,92 @@ const parseJobName = (text) => {
}; };
}; };
const getloudNormValues = async (response, file) => { const getloudNormValues = async (inputs, response, file) => {
// {
// eslint-disable-next-line import/no-unresolved // eslint-disable-next-line import/no-unresolved
const axios = require('axios'); const axios = require('axios');
const serverUrl = `http://${process.env.serverIp}:${process.env.serverPort}`;
let loudNormValues = {};
try {
// wait for job report to be updated by server,
await new Promise((resolve) => setTimeout(resolve, 10000));
const logFilesReq = await axios.post(`${serverUrl}/api/v2/list-footprintId-reports`, {
data: {
footprintId: file.footprintId,
},
});
if (logFilesReq.status !== 200) { const serverIp = inputs.serverIp ? inputs.serverIp : process.env.serverIp;
throw new Error('Failed to get log files, please rerun'); const serverPort = inputs.serverPort ? inputs.serverPort : process.env.serverPort;
} const serverUrl = `http://${serverIp}:${serverPort}`;
let loudNormValues = false;
let tries = 0;
let error = false;
while (tries < 15) {
try {
tries += 1;
// wait for job report to be updated by server,
await new Promise((resolve) => setTimeout(resolve, 2000));
const logFilesReq = await axios.post(`${serverUrl}/api/v2/list-footprintId-reports`, {
data: {
footprintId: file.footprintId,
},
});
if (logFilesReq.status !== 200) {
throw new Error('Failed to get log files, please rerun');
}
let logFiles = logFilesReq.data; let logFiles = logFilesReq.data;
logFiles = logFiles.sort((a, b) => { logFiles = logFiles.sort((a, b) => {
const joba = parseJobName(a); const joba = parseJobName(a);
const jobb = parseJobName(b); const jobb = parseJobName(b);
return jobb.start - joba.start; return jobb.start - joba.start;
}); });
const latestJob = logFiles[0]; const latestJob = logFiles[0];
const reportReq = await axios.post(`${serverUrl}/api/v2/read-job-file`, { const reportReq = await axios.post(`${serverUrl}/api/v2/read-job-file`, {
data: { data: {
footprintId: file.footprintId, footprintId: file.footprintId,
jobId: parseJobName(latestJob).jobId, jobId: parseJobName(latestJob).jobId,
jobFileId: latestJob, jobFileId: latestJob,
}, },
}); });
if (reportReq.status !== 200) { if (reportReq.status !== 200) {
throw new Error('Failed to get read latest log file, please rerun'); throw new Error('Failed to get read latest log file, please rerun');
} }
const report = reportReq.data.text; const report = reportReq.data.text;
const lines = report.split('\n'); const lines = report.split('\n');
let idx = -1; let idx = -1;
// get last index of Parsed_loudnorm // get last index of Parsed_loudnorm
lines.forEach((line, i) => { lines.forEach((line, i) => {
if (line.includes('Parsed_loudnorm')) { if (line.includes('Parsed_loudnorm')) {
idx = i; idx = i;
} }
}); });
if (idx === -1) { if (idx === -1) {
throw new Error('Failed to find loudnorm in report, please rerun'); throw new Error('Failed to find loudnorm in report, please rerun');
} }
const loudNormDataArr = []; const loudNormDataArr = [];
// { for (let i = (idx + 1); i < lines.length; i += 1) {
for (let i = (idx + 1); i < lines.length; i += 1) { const lineArr = lines[i].split(' ');
const lineArr = lines[i].split(' '); lineArr.shift();
lineArr.shift(); loudNormDataArr.push(lineArr.join(' '));
loudNormDataArr.push(lineArr.join(' ')); if (lines[i].includes('}')) {
if (lines[i].includes('}')) { break;
break; }
} }
loudNormValues = JSON.parse(loudNormDataArr.join(''));
break;
} catch (err) {
response.infoLog += err;
error = err;
} }
}
loudNormValues = JSON.parse(loudNormDataArr.join('')); if (loudNormValues === false && error) {
} catch (err) { throw new Error(error);
response.infoLog += err;
throw new Error(err);
} }
return loudNormValues; return loudNormValues;
@ -195,7 +227,7 @@ const plugin = async (file, librarySettings, inputs, otherArguments) => {
} if ( } if (
probeData.format.tags.NORMALISATIONSTAGE === 'FirstPassComplete' probeData.format.tags.NORMALISATIONSTAGE === 'FirstPassComplete'
) { ) {
const loudNormValues = await getloudNormValues(response, file); const loudNormValues = await getloudNormValues(inputs, response, file);
response.infoLog += `Loudnorm first pass values returned: \n${JSON.stringify(loudNormValues)}`; response.infoLog += `Loudnorm first pass values returned: \n${JSON.stringify(loudNormValues)}`;

Loading…
Cancel
Save