From 774b52e3e82f7ad50bd0ce3a60cf8c7613c5d997 Mon Sep 17 00:00:00 2001 From: Simon Date: Thu, 11 May 2023 23:08:58 +0200 Subject: [PATCH] =?UTF-8?q?Ecriture=20du=20g=C3=A9n=C3=A9rateur=20de=20man?= =?UTF-8?q?ifeste?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- src/build_job/package.json | 2 +- src/build_job/themeset_builder.js | 70 ++++++++++++++++++++++++++++--- 2 files changed, 65 insertions(+), 7 deletions(-) diff --git a/src/build_job/package.json b/src/build_job/package.json index 2805d3b..40eeb97 100644 --- a/src/build_job/package.json +++ b/src/build_job/package.json @@ -4,7 +4,7 @@ "description": "Generate a theme.json file from the images' metadata of the working folder.", "main": "themeset_builder.js", "scripts": { - "test": "node themeset_builder.js" + "start": "node themeset_builder.js" }, "author": "Simon", "license": "ISC", diff --git a/src/build_job/themeset_builder.js b/src/build_job/themeset_builder.js index a111c54..5389aad 100644 --- a/src/build_job/themeset_builder.js +++ b/src/build_job/themeset_builder.js @@ -7,11 +7,69 @@ const iptc = require('node-iptc'); // find all images const slug = env.PACKAGE_NAME || "valid_set"; 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 -fs.readFile(file, function (err, data) { - if (err) { throw err } - var iptc_data = iptc(data); - console.log(iptc_data) -}); \ No newline at end of file +fs.readdir(workingDirectory, (err, files) => { + if (err) { throw err }; + + // 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)); +}); + + + +