summaryrefslogtreecommitdiff
path: root/school/node_modules/pronote-api/src/fetch/contents.js
blob: 62e85df5090742fb467d20f3a249e44dc6987b88 (plain)
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
const { toPronoteWeek } = require('../data/dates');
const { getFileURL } = require('../data/files');
const fromHTML = require('../data/html');
const { withId, checkDuplicates } = require('../data/id');

const getContents = require('./pronote/contents');

async function contents(session, user, from = new Date(), to = null)
{
    if (!to || to < from) {
        to = new Date(from.getTime());
        to.setDate(to.getDate() + 1);
    }

    const fromWeek = toPronoteWeek(session, from);
    const toWeek = toPronoteWeek(session, to);

    const contents = await getContents(session, user, fromWeek, toWeek);
    if (!contents) {
        return null;
    }

    const result = [];

    for (const lesson of contents.lessons) {
        if (lesson.from < from || lesson.to > to) {
            continue;
        }

        const content = lesson.content[0]; // Maybe on some instances there will be multiple entries ? Check this
        if (typeof content === 'undefined') {
            continue;
        }
        result.push(withId({
            subject: lesson.subject.name,
            teachers: lesson.teachers.map(t => t.name),
            from: lesson.from,
            to: lesson.to,
            color: lesson.color,
            title: content.name,
            description: fromHTML(content.description),
            htmlDescription: content.htmlDescription,
            files: content.files.map(f => withId({ name: f.name, url: getFileURL(session, f) }, ['name'])),
            category: content.category.name
        }, ['subject', 'from', 'to']));
    }

    return checkDuplicates(result).sort((a, b) => a.from - b.from);
}

module.exports = contents;