-
-
×
-
Contenu du log
-
+
+
+
+
+
+
+
+
+ 📄 Contenu du log
+
+
+
+
+
+
+
-
@@ -676,11 +708,49 @@ autopostRouter.get('/log', (req, res) => {
console.error(err.message);
return res.status(500).json({ error: "Erreur lors du chargement du fichier log." });
}
- const htmlContent = convert.toHtml(data);
+
+ // 1) enlever les codes curseur (début de ligne/clear) mais garder les couleurs (…m)
+ // ex: \x1b[0G, \x1b[0K, etc. — ce sont EUX qui “collent” les blocs
+ let s = data.replace(/\x1b\[[0-9;]*[GK]/g, '');
+
+ // 2) supprimer TOUT segment de progression, même s’ils sont enchaînés sur UNE SEULE ligne
+ // forme couverte : "12.34% [======] 487.86 MiB/s, ETA 00:01"
+ // + variantes “ETA -”, et même le cas minimal "0.00% [ ]"
+ const ANSI_M = '(?:\\x1b\\[[0-9;]*m)*';
+ const NUM = '\\d{1,3}(?:\\.\\d+)?';
+ const PROG = new RegExp(
+ // pourcentage
+ ANSI_M + '\\s*' + NUM + '\\s*%' +
+ // barre
+ '\\s*' + ANSI_M + '\\[[^\\]]*\\]' +
+ // (option) vitesse + ETA
+ '(?:\\s*' + ANSI_M + NUM + '\\s*MiB\\/s,\\s*ETA\\s*[^\\x1bG\\n]*)?',
+ 'g'
+ );
+ s = s.replace(PROG, '');
+
+ // 3) nettoyer les résidus "-G" / "G" laissés juste avant G[INFO] (quand une progression était collée)
+ s = s.replace(/-?\s*G(?=\[INFO\])/g, '');
+
+ // 4) petite normalisation (sans casser les couleurs)
+ s = s.replace(/[ \t]+/g, ' ')
+ .replace(/\r/g, '')
+ .replace(/\n{3,}/g, '\n\n')
+ // Retour à la ligne avant chaque mot-clé (sauf début)
+ .replace(/(?!^)(?=\[INFO\])/gm, '\n')
+ .replace(/(?!^)Calculating\s*:/gm, '\nCalculating :')
+ .replace(/(?!^)Writing\s*:/gm, '\nWriting :')
+ .replace(/(?!^)Finalizing\s*:/gm, '\nFinalizing :')
+ .replace(/(?!^)Finished\s*:/gm, '\nFinished :')
+ .trim();
+
+ const htmlContent = convert.toHtml(s); // conserve les couleurs ANSI
res.json({ content: htmlContent });
});
+
});
+
// --------------------------- Mediainfo -----------------------------
autopostRouter.get('/mediainfo', (req, res) => {
const filename = req.query.name;