summaryrefslogtreecommitdiffstats
path: root/calendar.sh
blob: 5958cbb7777d3627776015c70e8eee4090f495e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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