summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2025-04-11 23:22:07 +0200
committerLeonard Kugis <leonard@kug.is>2025-04-11 23:22:07 +0200
commitfa7da1e36bebcfdd96116a173275d51b2d860223 (patch)
tree6cb72622c9809c4969551d17a77b176bb4b9ec50
parent3c7de9c00773d6a5c11b8e67d66b25356c03ea1f (diff)
downloadscripts-fa7da1e36bebcfdd96116a173275d51b2d860223.tar.gz
Implemented calendar script
-rwxr-xr-xcalendar.sh70
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