mirror of
https://gitlab.rlp.net/proj-wise2526-video2document/video2document.git
synced 2026-06-15 18:01:52 +02:00
Remade replace Speaker module which now takes the premade speaker mapping json and directly replaces speakers in the document. Also refined the Standard documents so consistency is improved
This commit is contained in:
@@ -7,35 +7,54 @@ const module_exports = {
|
||||
displayname: "Speaker Name Replacer",
|
||||
description: "Replaces speaker placeholder names with actual names based on a mapping in HTML files",
|
||||
|
||||
async function({ inputHtmlPath, speakerMappingPath }) {
|
||||
return await this.replaceNames(inputHtmlPath, speakerMappingPath);
|
||||
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);
|
||||
},
|
||||
|
||||
replaceNames: async function(inputHtmlPath, speakerMappingPath) {
|
||||
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");
|
||||
const mappingData = await fs.promises.readFile(speakerMappingPath, "utf-8");
|
||||
|
||||
let speakerMap = {};
|
||||
try {
|
||||
const parsed = JSON.parse(mappingData);
|
||||
if (parsed.speakerId && parsed.speakerName) {
|
||||
speakerMap[parsed.speakerId] = parsed.speakerName;
|
||||
} else {
|
||||
Object.assign(speakerMap, parsed);
|
||||
}
|
||||
} catch (e) {
|
||||
const lines = mappingData.trim().split('\n');
|
||||
lines.forEach(line => {
|
||||
const [placeholder, realName] = line.split(',').map(s => s.trim());
|
||||
if (placeholder && realName) speakerMap[placeholder] = realName;
|
||||
});
|
||||
}
|
||||
|
||||
let outputContent = htmlContent;
|
||||
Object.entries(speakerMap).forEach(([placeholder, realName]) => {
|
||||
const regex = new RegExp(`[\$begin:math:text$\\\\\[\]\?\$\{placeholder\}\[\\$end:math:text$\\]]?`, 'g');
|
||||
outputContent = outputContent.replace(regex, realName);
|
||||
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");
|
||||
@@ -49,22 +68,4 @@ const module_exports = {
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = module_exports;
|
||||
|
||||
if (require.main === module) {
|
||||
(async () => {
|
||||
const args = process.argv.slice(2);
|
||||
if (args.length < 2) process.exit(1);
|
||||
|
||||
const [inputHtmlPath, speakerMappingPath] = args;
|
||||
|
||||
if (!fs.existsSync(inputHtmlPath)) process.exit(1);
|
||||
if (!fs.existsSync(speakerMappingPath)) process.exit(1);
|
||||
|
||||
try {
|
||||
await module_exports.replaceNames(inputHtmlPath, speakerMappingPath);
|
||||
} catch (err) {
|
||||
process.exit(1);
|
||||
}
|
||||
})();
|
||||
}
|
||||
module.exports = module_exports;
|
||||
Reference in New Issue
Block a user