mirror of
https://gitlab.rlp.net/proj-wise2526-video2document/video2document.git
synced 2026-06-15 18:01:52 +02:00
71 lines
2.5 KiB
JavaScript
71 lines
2.5 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const module_exports = {
|
|
name: "replace_speaker",
|
|
type: "processor",
|
|
displayname: "Speaker Name Replacer",
|
|
description: "Replaces speaker placeholder names with actual names based on a mapping in HTML files",
|
|
|
|
async function(speakerMapping) {
|
|
// Relativ von dieser Datei aus
|
|
const documentsDir = path.resolve(__dirname, '../../../storage/documents');
|
|
const inputHtmlPath = await this.getNewestFile(documentsDir, '.html');
|
|
|
|
if (!inputHtmlPath) {
|
|
throw new Error(`No HTML files found in ${documentsDir}`);
|
|
}
|
|
|
|
return await this.replaceNames(inputHtmlPath, speakerMapping);
|
|
},
|
|
|
|
getNewestFile: async function(dirPath, extension) {
|
|
try {
|
|
const files = await fs.promises.readdir(dirPath);
|
|
const filtered = files.filter(f => f.endsWith(extension));
|
|
|
|
if (filtered.length === 0) return null;
|
|
|
|
const filesWithStats = await Promise.all(
|
|
filtered.map(async (f) => {
|
|
const fullPath = path.join(dirPath, f);
|
|
const stats = await fs.promises.stat(fullPath);
|
|
return { path: fullPath, time: stats.mtimeMs };
|
|
})
|
|
);
|
|
|
|
return filesWithStats.reduce((newest, curr) =>
|
|
curr.time > newest.time ? curr : newest
|
|
).path;
|
|
} catch (error) {
|
|
console.error("Error reading directory:", error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
replaceNames: async function(inputHtmlPath, speakerMapping) {
|
|
try {
|
|
const htmlContent = await fs.promises.readFile(inputHtmlPath, "utf-8");
|
|
|
|
let outputContent = htmlContent;
|
|
Object.entries(speakerMapping).forEach(([placeholder, value]) => {
|
|
// Extract name if value is an object
|
|
const displayName = typeof value === 'string' ? value : value.name;
|
|
|
|
// Replace speaker placeholder with display name
|
|
const regex = new RegExp(`\\b${placeholder}\\b`, 'g');
|
|
outputContent = outputContent.replace(regex, displayName);
|
|
});
|
|
|
|
await fs.promises.writeFile(inputHtmlPath, outputContent, "utf-8");
|
|
|
|
return inputHtmlPath;
|
|
|
|
} catch (error) {
|
|
console.error("Error replacing speaker names:", error);
|
|
throw error;
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = module_exports; |