diff --git a/classes/VirtuellerStundenplan.js b/classes/VirtuellerStundenplan.js index ebf4070..a2ffa85 100644 --- a/classes/VirtuellerStundenplan.js +++ b/classes/VirtuellerStundenplan.js @@ -13,7 +13,7 @@ class VirtuellerStundenplan { this.#password = config.password; if(config.key) this.key = config.key; - //this.teacherList = config.teachers; + this.holidays = config.holidays; } async fetchKey(returnKey=false) { @@ -189,7 +189,7 @@ class VirtuellerStundenplan { const hasContent = /[\da-zA-Z]/.test(JSON.stringify(day)); - res.content[i] = hasContent ? new TimetableDay(day) : null; + res.content[i] = hasContent ? new TimetableDay(day, this.holidays) : null; } return res; diff --git a/classes/parsers/TimetableDay.js b/classes/parsers/TimetableDay.js index d14c251..afa15fb 100644 --- a/classes/parsers/TimetableDay.js +++ b/classes/parsers/TimetableDay.js @@ -3,12 +3,11 @@ const TimetableHour = require("./TimetableHour"); class TimetableDay { first = null; last = null; + holiday = false; - constructor(data) { + constructor(data, holidays=defaultHolidays) { this.hours = []; - //console.log(data) - for (let i = 0; i < data[0].length; i++) { const hour = [ data[0][i], @@ -16,7 +15,16 @@ class TimetableDay { data[2][i], data[3][i], data[4][i], - ] + ]; + + const allSame = sameHours(data); + + console.log(allSame) + + if(holidays.includes(allSame)) { + this.holiday = allSame; + return; + } const hasContent = /[\da-zA-Z]/.test(JSON.stringify(hour)); @@ -28,6 +36,44 @@ class TimetableDay { this.hours[i] = hasContent ? new TimetableHour(hour) : null; } } + + get isHoliday() { + return this.holiday !== false; + } + + get holidayName() { + return this.isHoliday ? this.holiday : null; + } } +/** + * Checks if the day only has the same hours (e.g. "-", "Himmelfahrt") + * + * @param {Array} day (Nested) Day as an array. + * @returns {false|string} False if they differ. When not it returns the only existing value. + */ +const sameHours = day => { + // Only include column teacher, subject and room. + // Exam always "-", except for when there's exams. + day = [day[0], day[1], day[2]]; + + const flat = day.flat(); // from [["x","x"]] to ["x","x"] + const first = flat[0]; + return flat.every(val => val === first) ? first : false; +}; + +const defaultHolidays = [ + "Sommerferien", + "Tag der Deutschen Einheit", + "Herbstferien", + "Reformationstag", + "Weihnachtsferien", + "Winterferien", + "Osterferien", + "Tag der Arbeit", + "Himmelfahrt", + "Pfingsten", +]; + + module.exports = TimetableDay; \ No newline at end of file