From ac61df9796759e3018cffb7afe07b7afdb5a9c7c Mon Sep 17 00:00:00 2001 From: marc Date: Sun, 6 Sep 2026 23:14:40 +0200 Subject: [PATCH] docs(calendar): Kalender im README und Stand im Plan nachtragen Der Kalender kam im README bislang mit keinem Wort vor -- weder in der Phasentabelle noch als Abschnitt, obwohl er ein eigener Zugangsweg mit eigener Anmeldung ist. Jetzt steht er neben WebDAV, wo er hingehoert: gleiche Adresse-plus-App-Passwort-Logik, gleiche Sperre nach zehn Fehlversuchen. Zwei Dinge stehen dort ausdruecklich, weil sie beim Einrichten sonst eine halbe Stunde Suche kosten: - Die Kalenderfarbe holt DAVx5 nur beim Erfassen der Sammlungen, nicht bei jedem Abgleich. Sie bleibt im Telefon alt, bis man dort einmal "Kalenderliste aktualisieren" antippt. Am Geraet nachgemessen. - Kalender verwalten kann die Kalender-App des Telefons gar nicht; Android ueberlaesst das der Sync-App. Im Plan die Phasen 1 bis 3 auf erledigt, und darunter das, was ueber die Phasen hinaus dazukam, weil es sich beim Pruefen als noetig erwies: Umhaengen, EXDATE, getctag/calendar-color, Kalenderverwaltung vom Client aus, die beiden Selbsttests. Abbild veroeffentlicht als 2026.09.06 und latest. Co-Authored-By: Claude Opus 5 --- README.md | 47 +++++++++++++++++++++++++++++++++++++++++++++++ kalender-plan.md | 39 ++++++++++++++++++++++++++++++++++----- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 501621f..898f2a1 100644 --- a/README.md +++ b/README.md @@ -507,6 +507,52 @@ hunderte pro Minute. --- +## Kalender (CalDAV) + +Adresse: `https:///caldav/` – oder gar nichts eintippen und die +automatische Einrichtung über `/.well-known/caldav` laufen lassen, die jeder +verbreitete Client von selbst versucht. + +Angemeldet wird sich wie bei WebDAV mit **Benutzername und App-Passwort**; das +Kontopasswort wird auch hier abgewiesen. Dieselbe Sperre nach zehn +Fehlanmeldungen gilt ebenfalls. + +Was geht: + +- **Termine** lesen und schreiben, mit Wiederholungen, Ausnahmen einzelner + Termine (`EXDATE`), Ganztagsterminen und Zeitzonen. +- **Mehrere Kalender**, jeder mit Name und Farbe. Anlegen, umbenennen, + umfärben und löschen geht in der Weboberfläche **und** vom Client aus + (`MKCALENDAR`, `MKCOL`, `PROPPATCH`, `DELETE`). +- **Termin in einen anderen Kalender umhängen**, ohne dass er dabei seine + Kennung verliert – für Clients derselbe Termin an neuer Adresse, kein neuer. +- **Farben** in beide Richtungen: die des Kalenders (`calendar-color`) und die + einzelner Termine (`COLOR` nach RFC 7986, als CSS3-Name, weil DAVx5 sie so + liest). +- **Im- und Export** ganzer Kalender als `.ics`. + +Zwei Dinge, die man beim Einrichten wissen sollte: + +**Die Kalenderfarbe holt DAVx5 nur beim Erfassen der Sammlungen**, nicht bei +jedem Abgleich. Ändert sich die Farbe hier, bleibt sie im Telefon so lange +alt, bis man dort einmal *Kalenderliste aktualisieren* (⟳) antippt. Das ist +kein Fehler, sondern DAVx5' Sparsamkeit – kostet aber eine halbe Stunde +Suche, wenn man es nicht weiß. + +**Kalender verwalten kann die Kalender-App des Telefons nicht.** Android +überlässt das der Sync-App: Anlegen und Löschen geschieht in DAVx5 selbst, +nicht in der Samsung- oder Google-Kalender-App. + +Noch nicht da: `sync-collection` (RFC 6578). Jeder Abgleich holt deshalb die +volle Terminliste statt nur der Änderungen – richtig, aber sparsamer ginge es. +Ebenso offen: Aufgaben (`VTODO`) in der Weboberfläche und das Teilen von +Kalendern mit anderen Nutzern. + +Zwei Selbsttests decken den Bereich ab, einer je Zugangsweg – siehe +[`TESTING.md`](TESTING.md). + +--- + ## Office (Collabora / OnlyOffice / Euro-Office) Aether ist **WOPI-Host**. Das ist die Schnittstelle, über die Office-Server @@ -850,5 +896,6 @@ kostet einen Container und eine Zeile `.env`, nicht mehr. | 6 | Dokumente: OCR + Volltextsuche ✅, Etiketten ✅, Absender ✅, PDF-Betrachter ✅ – Inbox vertagt | 🔄 | | 7 | Office (WOPI-Host, Collabora / OnlyOffice) – [Anleitung](#office-collabora--onlyoffice) | ✅ (im Test) | | 8 | Härtung, 2FA, Observability, Extension-Points | 🔲 | +| — | [Kalender](#kalender-caldav): CalDAV, mehrere Kalender, Weboberfläche (Monat/Woche/Liste) – `sync-collection`, Aufgaben und Teilen offen | ✅ (im Test) | > Manuelle Test-Checkliste für die fertigen Phasen: siehe [`TESTING.md`](TESTING.md). diff --git a/kalender-plan.md b/kalender-plan.md index 092067b..1e39acb 100644 --- a/kalender-plan.md +++ b/kalender-plan.md @@ -81,14 +81,34 @@ Die abgeleiteten Spalten sind nur zum Vorsortieren da. ## Phasen -| | Inhalt | Aufwand | +| | Inhalt | Stand | |---|---|---| -| **1** | CalDAV lesend und schreibend, ein Kalender, Anmeldung über App-Passwörter, Auffindpfade (`/.well-known/caldav`, `current-user-principal`, `calendar-home-set`). Ziel: DAVx5 gleicht ab. | 1–2 Abende | -| **2** | Mehrere Kalender, Farbe, Umbenennen, Löschen. Export als `.ics`, Import einer bestehenden Datei. | 1 Abend | -| **3** | Weboberfläche in Aether: Monat, Woche, Liste; Termin anlegen, ändern, löschen. Der Teil, der Spaß macht – und dessen Fehler man **sieht**. | 2–3 Abende | +| **1** | CalDAV lesend und schreibend, ein Kalender, Anmeldung über App-Passwörter, Auffindpfade (`/.well-known/caldav`, `current-user-principal`, `calendar-home-set`). Ziel: DAVx5 gleicht ab. | ✅ | +| **2** | Mehrere Kalender, Farbe, Umbenennen, Löschen. Export als `.ics`, Import einer bestehenden Datei. | ✅ | +| **3** | Weboberfläche in Aether: Monat, Woche, Liste; Termin anlegen, ändern, löschen. Der Teil, der Spaß macht – und dessen Fehler man **sieht**. | ✅ | | **4** | `sync-collection` statt Vollabgleich, Aufgabenansicht, Teilen mit anderen Nutzern, öffentlicher Abo-Link, Kalender in der HoneyOS-Leiste. | offen | | **5** | Kontakte (CardDAV). Dieselbe Maschinerie, dieselbe Bibliothek – und **einfacher**, weil es dort keine Wiederholungen gibt. | später entscheiden | +Über die Phasen hinaus dazugekommen, weil es sich beim Prüfen als nötig +erwies: + +- **Termin umhängen** in einen anderen Kalender, unter Erhalt der UID – per + Ziehen in der Oberfläche, am Handy mit langem Drücken. +- **Einzelnen Termin aus einer Reihe streichen** (`EXDATE`), statt nur die + ganze Reihe löschen zu können. +- **`getctag` und `calendar-color`**, die go-webdav nicht kennt: aus der + Anfrage genommen und der Antwort selbst wieder angehängt + (`internal/calendar/propfind.go`). +- **Kalender vom Client aus verwalten** – `MKCALENDAR`, erweitertes `MKCOL`, + `PROPPATCH`, `DELETE` einer Sammlung (`internal/calendar/collections.go`). + Dafür Migration 23: Bei `MKCALENDAR` sucht der Client die Adresse aus, die + seither in `path_segment` steht. Leer = es gilt weiterhin die UUID, damit + eingerichtete Geräte ihre Kalender unter der gewohnten Adresse behalten. +- **Zwei Selbsttests**, einer je Zugangsweg: `scripts/kalender-selbsttest.py` + (JSON, 36 Prüfungen) und `scripts/caldav-selbsttest.py` (CalDAV, 62). Beide + Wege führen auf dieselben Daten, aber über völlig verschiedenen Code – ein + grüner Lauf des einen sagt nichts über den anderen. + ## Teilen – drei Bedeutungen, zwei davon gehen „Geteilter Kalender" meint je nach Person etwas anderes: @@ -237,7 +257,16 @@ Zwei verschiedene Dinge, die man leicht verwechselt: de-facto-Standard: Nextcloud, Thunderbird und DAVx5 können es. **Geht.** - **Farbe eines einzelnen Termins** – `COLOR` aus RFC 7986. In unserer eigenen Oberfläche jederzeit möglich; wie weit DAVx5 und Samsung Kalender das - weiterreichen, ist offen und muss am Gerät geprüft werden. + weiterreichen, ist offen und muss am Gerät geprüft werden. Geschrieben wird + sie als CSS3-**Name** (`tomato`), nicht als Hex-Wert – so verlangt es RFC + 7986, und so liest DAVx5 sie. Der genaue Wert steht zusätzlich in + `X-AETHER-COLOR`, damit die eigene Palette verlustfrei zurückkommt. + +**Am Gerät geprüft (06.09.2026):** Die Kalenderfarbe kommt an – aber erst, +nachdem in DAVx5 einmal *Kalenderliste aktualisieren* angetippt wurde. Beim +normalen Abgleich fragt DAVx5 `calendar-color` gar nicht ab; ein Mitschnitt +der Anfragen hat das gezeigt. Wer das nicht weiß, sucht den Fehler auf der +Serverseite, wo keiner ist. **Emojis im Kalendernamen** sind kein Protokollthema – der Name ist Text. „🏠 Haushalt" kommt überall an.