gtg2json/routes/index.js

156 lines
4.1 KiB
JavaScript
Raw Normal View History

var express = require('express');
2021-03-01 18:02:04 +01:00
var fs = require('fs');
var parseString = require("xml2js").parseString;
var router = express.Router();
2021-03-01 18:02:04 +01:00
var fileToOpen = 'gtg_tasks'
2021-03-01 18:14:47 +01:00
// const convertFiles = true;
2021-03-02 10:12:15 +01:00
let convertFiles = false;
let computeDataOnExtract = true;
2021-03-01 18:14:47 +01:00
2021-03-02 09:23:33 +01:00
let jsonAllData = {
2021-03-01 18:02:04 +01:00
tasks : {},
2021-03-02 09:23:33 +01:00
stats : {},
2021-03-01 18:02:04 +01:00
projects : {},
tags : {},
}
/* GET home page. */
2021-03-01 18:02:04 +01:00
/**
* obtenir la liste de tags que l'on a entré
*/
router.get('/', async function (req, res, next) {
2021-03-01 18:14:47 +01:00
if(convertFiles){
2021-03-01 18:02:04 +01:00
convertOneXmlToJson('gtg_tasks',res)
convertOneXmlToJson('tags',res)
convertOneXmlToJson('projects',res)
2021-03-01 18:14:47 +01:00
}else{
console.log('================== conversion de fichiers désactivée dans index.js ================== ')
}
2021-03-01 18:02:04 +01:00
// récupérer le contenu des json
2021-03-02 09:23:33 +01:00
jsonAllData.tags = require('../sources/tags_gtg.json')
jsonAllData.tasks = require('../sources/gtg_tasks_gtg.json')
if(computeDataOnExtract){
jsonAllData = computeData(jsonAllData)
2021-03-02 10:12:15 +01:00
computeDataOnExtract =false;
2021-03-02 09:23:33 +01:00
}else{
console.log('================== calcul de stats désactivé dans index.js ================== ')
}
console.log('json files read' )
2021-03-02 10:12:15 +01:00
res.render('index', {title: "Conversion de GTG tâches",
json: jsonAllData,
getPercentOfOpenTasks})
2021-03-02 09:23:33 +01:00
});
async function readfileJson(fileToOpen){
fs.readFile(`sources/${fileToOpen}`, "utf-8", function (err, data) {
2021-03-01 18:02:04 +01:00
if (err) console.log(err);
2021-03-02 09:23:33 +01:00
console.log('ok ', fileToOpen )
return JSON.parse(data)
2021-03-01 18:02:04 +01:00
});
2021-03-02 09:23:33 +01:00
}
2021-03-01 18:02:04 +01:00
2021-03-02 09:23:33 +01:00
function computeData(jsonAllData){
2021-03-01 18:14:47 +01:00
2021-03-02 09:23:33 +01:00
// 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);
2021-03-01 18:02:04 +01:00
2021-03-02 09:53:16 +01:00
jsonAllData.stats = {
tasksCount : jsonAllData.tasks.project.task.length,
tasksClosed : 0,
tasksOpen : 0,
listOpen: [],
listClosed: [],
}
2021-03-02 09:23:33 +01:00
for(let t of jsonAllData.tasks.project.task ) {
2021-03-02 09:53:16 +01:00
// 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++;
}
2021-03-02 09:23:33 +01:00
// console.log('tags', tags)
}
return jsonAllData
2021-03-01 18:02:04 +01:00
2021-03-02 09:23:33 +01:00
}
2021-03-01 18:02:04 +01:00
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)
});
}
2021-03-02 10:12:15 +01:00
function getPercentOfOpenTasks(someCount){
return Math.round( 100*someCount / jsonAllData.stats.tasksOpen)
}
2021-03-01 18:02:04 +01:00
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;