import { c } from './files.js' const ctage = { "Mo": [], "Di": [], "Mi": [], "Do": [], "Fr": [] } // returns time difference in 15-minute intervalls function timediff(a, b) { const time = "1970-01-01 "; return (new Date(time + a) - new Date(time + b)) / 1000 / 60 / 15; } export function gettimefromintervalls(x) { let y = 15 * x / 60 + 8 let z = y.toString().padStart(2, '0'); if (Math.round(y) == y) return `${z}:00`; return "" } function sortTage(tage) { for (let tag in tage) { tage[tag].sort((a, b) => { return timediff(a.von, b.von) }); } return tage; } function runtimes(tage, tage_runtimes) { for (let tag in tage) { for (let eintrag in tage[tag]) { // could be redundant if (eintrag == tage[tag].length) break; let a = tage[tag][eintrag]; let runtime = timediff(a.bis, a.von) tage_runtimes[tag].push({ "name": a.name, "raum": a.raum, "runtime": runtime, }); } } return tage_runtimes; } function bufferUp(tage) { tage = sortTage(tage); for (let tag in tage) { if (tage[tag][0].von != "08:00") { tage[tag].splice(0, 0, { "name": "BUFFER", "raum": "BUFFER", "von": "08:00", "bis": tage[tag][0].von, }) } if (tage[tag][tage[tag].length - 1].bis != "19:00") { tage[tag].push({ "name": "BUFFER", "raum": "BUFFER", "von": tage[tag][tage[tag].length - 1].bis, "bis": "19:00", }) } } for (let tag in tage) { for (let eintrag in tage[tag]) { if (eintrag == tage[tag].length - 1) break; let a = tage[tag][eintrag]; let b = tage[tag][eintrag - -1]; let runtime = timediff(b.von, a.bis) if (runtime > 0) { tage[tag].push({ "name": "BUFFER", "raum": "BUFFER", "von": a.bis, "bis": b.von, }); } } } return tage; } export function prepare(forICS = false) { let tage = structuredClone(ctage); let tage_runtimes = structuredClone(ctage); for (let eintrag of c.eintraege) { let eintragName = Object.keys(eintrag)[0]; eintrag = eintrag[eintragName] for (let veranstaltung in eintrag) { for (let termin of eintrag[veranstaltung]) { tage[termin[0]].push({ "name": `${eintragName.toString()} / ${veranstaltung.toString()}`, "raum": termin[3], "von": termin[1].replace("h", ":"), "bis": termin[2].replace("h", ":"), }) } } } if (forICS) { return tage = sortTage(tage); } tage = bufferUp(tage, ctage); tage = sortTage(tage); return runtimes(tage, tage_runtimes) }