-
Notifications
You must be signed in to change notification settings - Fork 0
/
wigpi.js
155 lines (151 loc) · 7.74 KB
/
wigpi.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
require('dotenv').config();
const cal = require('./calendarLib.js');
const ics = require('./icsLib.js');
const json = require('./jsonLib.js');
const fs = require('fs');
const crypto = require('crypto');
$json = fs.readFileSync(process.env.ROOT_PATH + "api/classes.json");
$classes = JSON.parse($json);
async function getCoursForYear(year, user) {
await cal.getCalendarForYear(year, user)
.then((cours_of_the_year) => {
for (j = 0; j < cours_of_the_year.length; j++) {
if (cours_of_the_year[j] != undefined) {
for (k = 0; k < cours_of_the_year[j].length; k++) {
ics.write("event", cours_of_the_year[j][k], icsFileName);
json.write("event", cours_of_the_year[j][k], jsonFileName);
}
}
}
});
}
async function getCoursForClass(username, classname, displayname) {
icsFileName = process.env.ROOT_PATH + "icsFiles/" + classname + ".ics.tmp";
jsonFileName = process.env.ROOT_PATH + "jsonFiles/" + classname + ".json.tmp";
hashFileName = process.env.ROOT_PATH + "hashFiles/" + classname + ".md5";
actualYear = (new Date().getFullYear())-1;
nextYear = actualYear + 1;
ics.write("start", displayname, icsFileName);
json.write("start", displayname, jsonFileName);
await getCoursForYear(actualYear, username)
.then(() => {
console.log("Done with year " + actualYear);
});
await getCoursForYear(nextYear, username)
.then(() => {
console.log("Done with year " + nextYear);
})
.then(async() => {
ics.write("end", null, icsFileName);
json.write("end", null, jsonFileName);
console.log("Done writing ics file for class " + classname);
console.log("Done writing json file for class " + classname);
})
// create a loop to iterate every day from the 01/01/2024 to 31/12/2024
// for (let i = 0; i < 365; i++) {
// let date = new Date("2024-01-01");
// date.setDate(date.getDate() + i);
// // convert the date to YYYYMMDDT000000Z format
// let dateStr = date.toISOString().split('T')[0].replace(/-/g, '') + "T";
// ics.write("event", {
// dtstart: dateStr + "080000",
// dtend: dateStr + "090000",
// matiere: "Nous rencontrons actuellement un problème avec notre fournisseur de données et nous prenons des mesures pour résoudre ces problèmes dès que possible. Nous vous prions de nous excuser pour la gêne occasionnée.",
// prof: {name: "Erreur", email: "erreur@epsi.fr"},
// salle: "Erreur",
// batiment: "Erreur",
// visio: false,
// teamslink: "",
// description: "",
// uid: crypto.createHash('md5').update(dateStr + "080000" + "090000" + "Erreur" + "Erreur" + "Erreur" + "Erreur").digest("hex")
// }, icsFileName);
// json.write("event", {
// dtstart: dateStr + "080000",
// dtend: dateStr + "090000",
// matiere: "Nous rencontrons actuellement un problème avec notre fournisseur de données et nous prenons des mesures pour résoudre ces problèmes dès que possible. Nous vous prions de nous excuser pour la gêne occasionnée.",
// prof: {name: "Erreur", email: "erreur@epsi.fr"},
// salle: "Erreur",
// batiment: "Erreur",
// visio: false,
// teamslink: "",
// description: ""
// }, jsonFileName);
// }
ics.write("end", null, icsFileName);
json.write("end", null, jsonFileName);
// sleep for 3 seconds
await new Promise(r => setTimeout(r, 3000));
// move the tmp files to the final ones
let $icsFiles = fs.readdirSync(process.env.ROOT_PATH + "icsFiles/");
let $jsonFiles = fs.readdirSync(process.env.ROOT_PATH + "jsonFiles/");
for (let i = 0; i < $icsFiles.length; i++) {
if ($icsFiles[i].includes(".tmp")) {
await fs.rename(process.env.ROOT_PATH + "icsFiles/" + $icsFiles[i], process.env.ROOT_PATH + "icsFiles/" + $icsFiles[i].replace(".tmp", ""), (err) => {
if (err) throw err;
console.log("Done writing ics file for class " + $icsFiles[i].replace(".tmp", ""));
});
}
}
for (let i = 0; i < $jsonFiles.length; i++) {
if ($jsonFiles[i].includes(".tmp")) {
await fs.rename(process.env.ROOT_PATH + "jsonFiles/" + $jsonFiles[i], process.env.ROOT_PATH + "jsonFiles/" + $jsonFiles[i].replace(".tmp", ""), (err) => {
if (err) throw err;
console.log("Done writing json file for class " + $jsonFiles[i].replace(".tmp", ""));
});
}
}
}
async function createHashFile(jsonFileName, hashFileName) {
data = fs.readFileSync(jsonFileName);
if (data) {
const hash = crypto.createHash('md5').update(data).digest('hex');
await fs.writeFile(hashFileName, hash, (err) => {
if (err) throw err;
console.log(`Hash saved to ${hashFileName}`);
});
}
}
async function getCoursForAllClasses() {
for (let i = 0; i < $classes.length; i++) {
$date = new Date();
$date_str = ('0' + $date.getDate()).slice(-2) + "/" + ('0' + ($date.getMonth() + 1)).slice(-2) + "/" + $date.getFullYear() + " " + ('0' + $date.getHours()).slice(-2) + ":" + ('0' + $date.getMinutes()).slice(-2) + ":" + ('0' + $date.getSeconds()).slice(-2);
console.log("[LOG CREATE ICS][" + $date_str + "] Début de la classe " + $classes[i].name);
console.log("[LOG CREATE JSON][" + $date_str + "] Début de la classe " + $classes[i].name);
await getCoursForClass($classes[i].username, $classes[i].name, $classes[i].displayname)
.then(() => {
console.log("Fini pour la classe " + $classes[i].name);
})
console.log("[LOG CREATE ICS][" + $date_str + "] Fin de la classe " + $classes[i].name);
console.log("[LOG CREATE JSON][" + $date_str + "] Fin de la classe " + $classes[i].name);
}
// sleep for 10 seconds
await new Promise(r => setTimeout(r, 10000));
// move the tmp files to the final ones
let $icsFiles = fs.readdirSync(process.env.ROOT_PATH + "icsFiles/");
let $jsonFiles = fs.readdirSync(process.env.ROOT_PATH + "jsonFiles/");
for (let i = 0; i < $icsFiles.length; i++) {
if ($icsFiles[i].includes(".tmp")) {
await fs.rename(process.env.ROOT_PATH + "icsFiles/" + $icsFiles[i], process.env.ROOT_PATH + "icsFiles/" + $icsFiles[i].replace(".tmp", ""), (err) => {
if (err) throw err;
console.log("Done writing ics file for class " + $icsFiles[i].replace(".tmp", ""));
});
}
}
for (let i = 0; i < $jsonFiles.length; i++) {
if ($jsonFiles[i].includes(".tmp")) {
await fs.rename(process.env.ROOT_PATH + "jsonFiles/" + $jsonFiles[i], process.env.ROOT_PATH + "jsonFiles/" + $jsonFiles[i].replace(".tmp", ""), (err) => {
if (err) throw err;
console.log("Done writing json file for class " + $jsonFiles[i].replace(".tmp", ""));
});
}
}
for (let i = 0; i < $jsonFiles.length; i++) {
// create hash files
if ($jsonFiles[i].includes(".json")) {
await createHashFile(process.env.ROOT_PATH + "jsonFiles/" + $jsonFiles[i], process.env.ROOT_PATH + "hashFiles/" + $jsonFiles[i].replace(".json", ".md5"));
}
}
console.log("Done writing ics file for all classes");
console.log("Done writing json file for all classes");
}
getCoursForAllClasses();