docs(kalender): Plugin-Frage, Teamkalender über Gruppen, Oberfläche und Farben
Kein Plugin: Der Projektplan legt in Abschnitt 8 selbst fest, dass Extension-Points erst nach einem stabilen Core kommen und Kernfeatures nicht als Plugin gebaut werden. Ein Plugin-System vorzuziehen hieße, die Schnittstelle nach genau einem Nutzer zu entwerfen. Stattdessen ein eigenes Paket, in einer Zeile angeschlossen, abschaltbar – der natürliche erste Kandidat, wenn es das System einmal gibt. Teamkalender brauchen nichts Neues: acl.Access trägt bereits einen Prinzipal statt eines Eigentümers, Konto oder Gruppe. Ein Kalender, der einer Gruppe gehört, ist der Teamkalender; persönliche Freigabe bleibt die Freigabe an ein Konto mit read/write. Oberfläche festgehalten: mehrere Kalender übereinander, Sichtbarkeit per Klick auf den farbigen Haken, serverseitig je Nutzer gespeichert – samt eigener Farbe je Nutzer, die in derselben Zeile fast nichts kostet. Farben getrennt notiert: Kalenderfarbe (calendar-color, de facto überall unterstützt) und Terminfarbe (RFC 7986, Weiterreichung ans Telefon ungeprüft). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6f0efc8e7b
commit
5808ff5ef8
1 file changed
+67
@@ -148,6 +148,73 @@ Baïkal stehen beide darauf, das ist also das Verhalten, an das die Clients
|
|||||||
gewöhnt sind. Radicale ist zum Nachlesen gut – kurzer Code –, aber es ist nicht
|
gewöhnt sind. Radicale ist zum Nachlesen gut – kurzer Code –, aber es ist nicht
|
||||||
die Fassung, gegen die getestet wurde.
|
die Fassung, gegen die getestet wurde.
|
||||||
|
|
||||||
|
## Kein Plugin – aber ausklinkbar gebaut
|
||||||
|
|
||||||
|
Der Projektplan legt es selbst fest (Abschnitt 8): *„ERST sauberer Core.
|
||||||
|
Extension-Points erst definieren, wenn der Core stabil ist. Kernfeatures
|
||||||
|
bleiben erstklassig, nicht als Plugin."* Ein Plugin-System zu bauen, um darauf
|
||||||
|
den Kalender zu setzen, drehte diese Reihenfolge um – und ein Kalender wäre
|
||||||
|
sein erster und einziger Nutzer, also entstünde die Schnittstelle nach genau
|
||||||
|
einem Fall.
|
||||||
|
|
||||||
|
Stattdessen so gebaut, dass er später herauszulösen ist:
|
||||||
|
|
||||||
|
- eigenes Paket `internal/calendar`, eigene Migrationen, eigene Routen
|
||||||
|
- angeschlossen in **einer** Zeile in `main.go`
|
||||||
|
- greift nach außen nur auf `auth` und `acl` zu, nicht in andere Pakete hinein
|
||||||
|
- abschaltbar: kein Kalender aktiv → keine Routen, kein Menüpunkt
|
||||||
|
|
||||||
|
Damit ist er der natürliche erste Kandidat, wenn es das Plugin-System einmal
|
||||||
|
gibt – ohne dass wir es vorher erfinden.
|
||||||
|
|
||||||
|
## Teamkalender über Gruppen
|
||||||
|
|
||||||
|
Aether kennt bereits Gruppen samt Gruppenordnern, und `acl.Access` trägt einen
|
||||||
|
**Prinzipal** statt eines Eigentümers – ein Konto *oder* eine Gruppe
|
||||||
|
(`IsGroup`). Genau das nehmen wir:
|
||||||
|
|
||||||
|
| Zweck | Weg |
|
||||||
|
|---|---|
|
||||||
|
| **Teamkalender** | Kalender gehört einer Gruppe. Wer in der Gruppe ist, hat ihn – ohne einzelne Freigaben. Angelegt in den Admin-Optionen, wie Gruppenordner. |
|
||||||
|
| **Persönlich teilen** | Freigabe an ein einzelnes Konto, mit Recht `read` oder `write`. In der Oberfläche ein Schalter „darf auch schreiben". |
|
||||||
|
|
||||||
|
Beides läuft über dieselbe Prüfung wie bei Dateien: `resolveCalendar` nach dem
|
||||||
|
Vorbild von `files.resolveFile`. Kein zweites Rechtekonzept.
|
||||||
|
|
||||||
|
## Oberfläche
|
||||||
|
|
||||||
|
**Mehrere Kalender gleichzeitig** – das ist der Normalfall, nicht die Ausnahme.
|
||||||
|
Die Ansicht legt sie übereinander; jeder Termin trägt die Farbe seines
|
||||||
|
Kalenders.
|
||||||
|
|
||||||
|
**Sichtbarkeit mit einem Klick**, wie in Google Kalender und der Samsung-App:
|
||||||
|
runder, in der Kalenderfarbe gefüllter Haken in der Liste. Klick = an, Klick =
|
||||||
|
aus. **Serverseitig je Nutzer gespeichert**, damit es am Rechner und am Handy
|
||||||
|
gleich aussieht – dafür eine Tabelle:
|
||||||
|
|
||||||
|
kalender_ansicht nutzer_id, kalender_id, sichtbar, reihenfolge, farbe_eigen
|
||||||
|
|
||||||
|
Das `farbe_eigen` ist geschenkt, wenn die Zeile ohnehin existiert: Ein geteilter
|
||||||
|
Kalender darf bei dir grün und beim anderen blau sein – so macht es Google auch.
|
||||||
|
|
||||||
|
**Wichtig:** Diese Einstellung gilt für *unsere* Oberfläche. Was das Telefon
|
||||||
|
anzeigt, entscheiden DAVx5 und Samsung Kalender selbst; darauf haben wir keinen
|
||||||
|
Zugriff.
|
||||||
|
|
||||||
|
## Farben
|
||||||
|
|
||||||
|
Zwei verschiedene Dinge, die man leicht verwechselt:
|
||||||
|
|
||||||
|
- **Farbe des Kalenders** – das, was du in der Samsung-App siehst. Im Protokoll
|
||||||
|
`calendar-color` aus Apples Namensraum. Steht in keinem RFC, ist aber
|
||||||
|
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.
|
||||||
|
|
||||||
|
**Emojis im Kalendernamen** sind kein Protokollthema – der Name ist Text.
|
||||||
|
„🏠 Haushalt" kommt überall an.
|
||||||
|
|
||||||
## Die Notausfahrt
|
## Die Notausfahrt
|
||||||
|
|
||||||
Ein Kalender, der lautlos einen Termin verschluckt, ist schlimmer als einer,
|
Ein Kalender, der lautlos einen Termin verschluckt, ist schlimmer als einer,
|
||||||
|
|||||||
Reference in new issue
Block a user