const express = require('express'); const path = require('path'); const app = express(); const { spawnSync } = require('child_process'); const moment = require('moment'); // Befehl für die Skriptausführung const command = process.platform === 'win32' ? 'python' : 'python3'; // Pfad zum Kalender-Skript const scriptPath = path.resolve(__dirname, 'getCalendar.py'); const templates = path.join(__dirname, 'templates'); // Stelle den Pfad zum "views" Verzeichnis ein app.set('views', templates); // Verwende EJS als Vorlagen-Engine app.set('view engine', 'ejs'); // Funktion zum Formatieren des Datums function formatDate(date) { const day = date.getDate().toString().padStart(2, '0'); const month = (date.getMonth() + 1).toString().padStart(2, '0'); const year = date.getFullYear(); return `${day}.${month}.${year}`; } // Funktion zum Erstellen der Liste der letzten 50 Wochen function getLast50Weeks() { let currentWeek = moment().startOf('isoWeek'); const last50Weeks = []; for (let i = 0; i < 50; i++) { const startOfWeek = currentWeek.clone().format('DD.MM.YYYY'); const endOfWeek = currentWeek.clone().add(6, 'days').format('DD.MM.YYYY'); last50Weeks.push(startOfWeek + " - " + endOfWeek); currentWeek.subtract(7, 'days'); } return last50Weeks; } function convertToJsEscape(str) { return str.replace(/[\u00A0-\u9999]/g, function (match) { return '\\u' + ('0000' + match.charCodeAt(0).toString(16)).slice(-4); }); } function getCalendarEntries(week) { const weekDate = getLast50Weeks()[week]; const [startDateStr, endDateStr] = weekDate.split(" - "); // Argumente für das Kalender-Skript const args = [ process.env.CALDAV_URL, process.env.CALDAV_USER, process.env.CALDAV_PASSWORD, process.env.CALDAV_CALENDAR, startDateStr, endDateStr ]; // Skript ausführen und Output in einer Variable speichern const result = spawnSync(command, [scriptPath, ...args], { encoding: 'utf-8' }); console.log(convertToJsEscape(result.stdout.toString('utf-8'))); return result.stdout; } // Definiere eine Route für die Startseite app.get('/', (req, res) => { res.render('index', { options:getLast50Weeks() }); }); // Definiere eine Route für die Ausgabe der Daten app.get('/getreport', (req, res) => { res.send(getCalendarEntries(req.query.week)); }); // Starte den Webserver app.listen(3000, () => { console.log('Webserver läuft auf Port 3000'); });