diff options
-rwxr-xr-x | calendar.sh | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/calendar.sh b/calendar.sh new file mode 100755 index 0000000..5958cbb --- /dev/null +++ b/calendar.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +BASE_DIR="." +CONFIG_FILE="${BASE_DIR}/config.json" +TMP_DIR=$(mktemp -d) +trap 'rm -rf "$TMP_DIR"' EXIT + +# jq muss installiert sein +if ! command -v jq &> /dev/null; then + echo "Fehler: 'jq' ist nicht installiert. Bitte installiere es zuerst." + exit 1 +fi + +JSON_PREFIX="calendar" + +# Konfigurationswerte auslesen +BASE_URL=$(jq -r ".${JSON_PREFIX}.caldav_base_url" "$CONFIG_FILE") +USERNAME=$(jq -r ".${JSON_PREFIX}.caldav_username" "$CONFIG_FILE") +PASSWORD=$(jq -r ".${JSON_PREFIX}.caldav_password" "$CONFIG_FILE") + +CALENDARS=$(jq -c ".${JSON_PREFIX}.calendars[]" "$CONFIG_FILE") + +for entry in $CALENDARS; do + ICS_URL=$(echo "$entry" | jq -r '.ics') + CALDAV_NAME=$(echo "$entry" | jq -r '.name') + + echo "INFO: Lade ICS von: $ICS_URL" + ICS_FILE="$TMP_DIR/$CALDAV_NAME.ics" + ICS_STRIPPED="$TMP_DIR/${CALDAV_NAME}_stripped.ics" + curl -s "$ICS_URL" -o "$ICS_FILE" + + if [[ ! -s "$ICS_FILE" ]]; then + echo "WARNING: Fehler beim Herunterladen von $ICS_URL" + continue + fi + + CALDAV_URL="${BASE_URL}${CALDAV_NAME}/" + + # ICS-Datei in einzelne VEVENTs zerlegen + csplit -s -f "$TMP_DIR/event_" -b "%03d.ics" "$ICS_FILE" '/^BEGIN:VEVENT/' '{*}' > /dev/null + + for vevent_file in "$TMP_DIR"/event_*.ics; do + if grep -q "^BEGIN:VEVENT" "$vevent_file"; then + # UID extrahieren + EVENT_UID=$(awk -F':' '/^UID:/ {gsub(/\r/, "", $2); print $2; exit}' "$vevent_file") + SAFE_EVENT_UID=$(echo "$EVENT_UID" | sed 's/[^a-zA-Z0-9._-]/_/g') + + # Neue vollständige Einzel-ICS-Datei erzeugen + OUTFILE="$TMP_DIR/$SAFE_EVENT_UID.ics" + { + echo "BEGIN:VCALENDAR" + echo "VERSION:2.0" + echo "PRODID:-//calendar script//EN" + cat "$vevent_file" + grep -q "END:VCALENDAR" "$vevent_file" || echo "END:VCALENDAR" + } > "$OUTFILE" + + kate "$OUTFILE" + + echo "INFO: Lade UID=$SAFE_EVENT_UID → ${CALDAV_URL}${SAFE_EVENT_UID}.ics" + RESPONSE=$(curl -s -w "\nHTTP-Code: %{http_code}\n" -u "$USERNAME:$PASSWORD" \ + -X PUT "${CALDAV_URL}${SAFE_EVENT_UID}.ics" \ + -H "Content-Type: text/calendar; charset=utf-8" \ + --data-binary "@$OUTFILE") + + echo "$RESPONSE" + fi + done + +done
\ No newline at end of file |