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
|