Ecriture du générateur de manifeste

Fonctionne en local avec le jeu de test valide, mais à besoin d'être ajuster avec:
 - Caster les nombres qui sont encore en string
 - Fluidifier l'execution dans le dossier de travail car le module n'est pas à la racine du projet
 - Améliorer le debugage local tant via npm que via VSCode (Pourquoi le dossier de travail doit être au niveau du package.json?, j'ai besoin de plus de connaissance)
 - Voir pour mieux paralléliser l'extraction des données (boucle forEach séquentiel, je pourrais tirer partie d'un Yield ou Async Await)
This commit is contained in:
Simon Pistache 2023-05-11 23:08:58 +02:00
parent b349fe729a
commit 774b52e3e8
2 changed files with 65 additions and 7 deletions

View File

@ -4,7 +4,7 @@
"description": "Generate a theme.json file from the images' metadata of the working folder.", "description": "Generate a theme.json file from the images' metadata of the working folder.",
"main": "themeset_builder.js", "main": "themeset_builder.js",
"scripts": { "scripts": {
"test": "node themeset_builder.js" "start": "node themeset_builder.js"
}, },
"author": "Simon", "author": "Simon",
"license": "ISC", "license": "ISC",

View File

@ -7,11 +7,69 @@ const iptc = require('node-iptc');
// find all images // find all images
const slug = env.PACKAGE_NAME || "valid_set"; const slug = env.PACKAGE_NAME || "valid_set";
const root = env.ENTRY_FOLDER || "test"; const root = env.ENTRY_FOLDER || "test";
let file = path.join(root, slug, "bl2_eridum_badlands_1.jpg"); let workingDirectory = path.join("../..", root, slug);
// extract metadata from them // extract metadata from them
fs.readFile(file, function (err, data) { fs.readdir(workingDirectory, (err, files) => {
if (err) { throw err } if (err) { throw err };
var iptc_data = iptc(data);
console.log(iptc_data) // construct a JSON file
let theme = new Object();
theme.dayImageList = [];
theme.nightImageList = [];
theme.sunsetImageList = [];
theme.sunriseImageList = [];
// iterate each files
files.filter(file => path.extname(file) == '.jpg').forEach(image => {
buffer = fs.readFileSync(path.join(workingDirectory, image));
//if (err) { throw err };
// extract metadata
let metadata = iptc(buffer);
// fill object
theme.imageFilename ||= metadata.special_instructions + "_*" + path.extname(image);
theme.imageCredits ||= metadata.copyright_notice;
theme.displayName ||= metadata.headline;
// explore categories to find if image is dayHighlight or nightHighlight
metadata.supplemental_categories?.forEach(cat => {
switch (cat) {
case "dayHighlight":
theme.dayHighlight ||= metadata.original_transmission_reference;
break;
case "nightHighlight":
theme.nightHighlight ||= metadata.original_transmission_reference;
break;
default:
break;
}
});
switch (metadata.category) {
case "day":
theme.dayImageList.push(metadata.original_transmission_reference);
break;
case "night":
case "nig":
theme.nightImageList.push(metadata.original_transmission_reference);
break;
case "sunset":
case "twilight":
case "twi":
theme.sunsetImageList.push(metadata.original_transmission_reference);
break;
case "sunrise":
case "dawn":
case "daw":
theme.sunriseImageList.push(metadata.original_transmission_reference);
break;
default:
break;
}
});
fs.writeFileSync(path.join(workingDirectory, 'theme.json'), JSON.stringify(theme));
}); });