var express = require('express'); var fs = require('fs'); var parseString = require("xml2js").parseString; var router = express.Router(); var fileToOpen = 'gtg_tasks' // const convertFiles = true; let convertFiles = false; let computeDataOnExtract = true; let jsonAllData = { tasks : {}, stats : {}, projects : {}, tags : {}, } /* GET home page. */ /** * obtenir la liste de tags que l'on a entré */ router.get('/', async function (req, res, next) { if(convertFiles){ convertOneXmlToJson('gtg_tasks',res) convertOneXmlToJson('tags',res) convertOneXmlToJson('projects',res) }else{ console.log('================== conversion de fichiers désactivée dans index.js ================== ') } // récupérer le contenu des json jsonAllData.tags = require('../sources/tags_gtg.json') jsonAllData.tasks = require('../sources/gtg_tasks_gtg.json') if(computeDataOnExtract){ jsonAllData = computeData(jsonAllData) computeDataOnExtract =false; }else{ console.log('================== calcul de stats désactivé dans index.js ================== ') } console.log('json files read' ) res.render('index', {title: "Conversion de GTG tâches", json: jsonAllData, getPercentOfOpenTasks}) }); async function readfileJson(fileToOpen){ fs.readFile(`sources/${fileToOpen}`, "utf-8", function (err, data) { if (err) console.log(err); console.log('ok ', fileToOpen ) return JSON.parse(data) }); } function computeData(jsonAllData){ // trouver le nombre de tâches ayant un tag en particulier // et rajouter ce nombre à chaque tag, dans countTasks : N // let tagCountTasks = Object.create(jsonAllData.tags); jsonAllData.stats = { tasksCount : jsonAllData.tasks.project.task.length, tasksClosed : 0, tasksOpen : 0, listOpen: [], listClosed: [], } for(let t of jsonAllData.tasks.project.task ) { // console.log('t', t) let tags = t["$"].tags.split(',') for(let tag of tags){ // console.log('tag', tag) jsonAllData.tags.tagstore.tag.map( elem =>{ // console.log('elem', elem) if(elem['$'].name == tag){ if(!elem.tasks){ elem.tasks = 0 } if(!elem.tasksListById){ elem.tasksListById = [] } if(!elem.tasksListByTitle){ elem.tasksListByTitle = [] } if(!elem.tasksListIsActiveByTitle){ elem.tasksListIsActiveByTitle = [] } if(!elem.tasksListIsDoneByTitle){ elem.tasksListIsDoneByTitle = [] } elem.tasks++ elem.tasksListById.push(t['$'].id) elem.tasksListByTitle.push(t.title) if(t['$'].status == "Active"){ elem.tasksListIsActiveByTitle.push(t.title) } if(t['$'].status == "Done"){ elem.tasksListIsDoneByTitle.push(t.title) } } }) } if(t.donedate){ jsonAllData.stats.tasksClosed++; jsonAllData.stats.listOpen.push(t); }else{ jsonAllData.stats.tasksOpen++; } // console.log('tags', tags) } return jsonAllData } function convertOneXmlToJson(fileToOpen,res){ fs.readFile(`sources/${fileToOpen}.xml`, "utf-8", function (err, data) { if (err) console.log(err); const results = transformToJson(data, fileToOpen, res) console.log('fichier converti en json', fileToOpen) }); } function getPercentOfOpenTasks(someCount){ return Math.round( 100*someCount / jsonAllData.stats.tasksOpen) } function transformToJson(xml,fileToOpen, res) { return parseString(xml, function (err, result) { if (err) console.log(err); // console.dir(JSON.stringify(result)); console.log('Done'); // write file to disk fs.writeFile(`sources/${fileToOpen}_gtg.json`, JSON.stringify(result, null, 4), 'utf8', (err) => { if (err) { console.log(`Error writing file: ${err}`); // return JSON.stringify(result) res.send(err) } else { console.log(`File \`sources/${fileToOpen}_gtg.json\` is written successfully!`); } }); }); } module.exports = router;