Commit Graph
51 Commits
Author SHA1 Message Date
stefankoelle 5bd06d268b ui: Gruppen-Tags auf Kontakt-Detailseite verlinken
Gruppen-Tags auf der Kontakt-Detailseite sind jetzt klickbar und
führen zur Gruppensuche (/search?group=<uid>).
2026-08-07 16:07:50 +02:00
stefankoelle 565cd15b87 ui: Sidebar 380px breit, Special Searches als Cloud
Sidebar-Breite von 280px auf 380px erhöht. Special Searches nutzen
jetzt dasselbe flex-wrap Tag-Layout wie die Gruppen-Cloud.
2026-08-07 16:04:53 +02:00
stefankoelle aa01f47d92 web group cloud 2026-08-07 15:54:34 +02:00
stefankoelle cccb4217b0 fix: Code-Review-Korrekturen für PR #1
- Cross-Tenant-Datenleck in get_group_members: Account-Filter im
  LEFT JOIN contacts hinzugefügt (c.account = g.account)
- CROSS JOIN in get_group durch sauberen JOIN ON g.id = gm.group_id
  ersetzt
- Leere Gruppen werden jetzt gespeichert (parse_group gibt auch
  leere member_uids-Listen zurück)
- ON DELETE CASCADE Doku korrigiert: CASCADE greift nur beim Löschen
  einer Gruppe, nicht beim Löschen eines Kontakts
- Migration für Bestands-DBs in README dokumentiert (sync_state
  leeren für vollen Re-Sync)
- Index idx_group_members_member_uid für get_groups_for_contact
- Unbenutzte is_admin-Variablen in neuen Endpoints bereinigt
2026-08-07 15:30:17 +02:00
stefankoelle 94a279f207 feat: iCloud-Kontaktgruppen synchronisieren und API-Endpunkte hinzufügen
Erkennt iCloud-Gruppen (vCards mit X-ADDRESSBOOKSERVER-KIND:group) beim
CardDAV-Sync und speichert sie separat in den neuen Tabellen groups und
group_members statt als Kontakte in die contacts-Tabelle.

Änderungen:
- sql/schema.sql: Neue Tabellen groups + group_members (FK CASCADE)
- src/vcard_parser.py: is_group_vcard() + parse_group() Funktionen
- src/db.py: DB-Funktionen für Gruppen (upsert, delete, replace, get)
- src/sync.py: _classify_vcards() trennt Gruppen von Kontakten
- src/api/schemas.py: Pydantic-Modelle für Gruppen-Responses
- src/api/main.py: 3 neue Endpunkte (/api/groups, /{id}, /{id}/members)
- src/api/templates/contact.html: Gruppen-Section im Kontakt-Detail
- README.md + SPEC.md: Dokumentation aktualisiert
2026-08-07 15:18:44 +02:00
stefankoelle 3dfff404b9 sidebar improve 2026-08-07 14:51:00 +02:00
stefankoelle 6d6a8cf9e0 dashboard sidebar 2026-08-07 14:45:04 +02:00
stefankoelle 32c6bf6908 also on web 2026-08-07 13:57:20 +02:00
stefankoelle 14b2101b9f unknown year dashboard fix 2026-08-07 13:41:35 +02:00
stefankoelle 34860e8ae4 birthday unknown year filter 2026-08-07 13:34:18 +02:00
stefankoelle 5cdefff6f5 timezone config fix 2026-08-07 13:18:33 +02:00
stefankoelle 04f464c7bb timezone config 2026-08-07 13:06:48 +02:00
stefankoelle 8eaac47ef6 mail test method 2026-08-07 12:39:21 +02:00
stefankoelle ddb65055d8 web dashboard special links 2026-08-05 22:35:34 +02:00
stefankoelle 3f5a8dff91 web contact details with tiles 2026-08-05 22:19:08 +02:00
stefankoelle cbf4020a3e web custom links city placeholder 2026-08-05 20:47:00 +02:00
stefankoelle e54891f4ed web custom links position exactly 2026-08-05 20:43:09 +02:00
stefankoelle ed900eed74 web custom links position box 2026-08-05 20:38:50 +02:00
stefankoelle a2035b658b web custom links try layout again 2026-08-05 20:32:22 +02:00
stefankoelle 5ca8eeeaa7 web custom links urlquote 2026-08-05 20:27:38 +02:00
stefankoelle ed9bf5f062 web custom links 2026-08-05 20:24:09 +02:00
stefankoelle 895027d8d2 web clickable photo centered 2026-08-05 17:50:29 +02:00
stefankoelle 4155d029bb web clickable photo 2026-08-05 17:41:49 +02:00
stefankoelle eacdefaacf web dashboard birthday with photo 2026-08-05 17:28:07 +02:00
stefankoelle 0d71ccd3a6 web dashboard birthday layout like search 2026-08-05 17:19:23 +02:00
stefankoelle be7832ea31 web badge on top right 2026-08-05 17:06:41 +02:00
stefankoelle 082a7c5b38 web badge even smaller 2026-08-05 16:59:37 +02:00
stefankoelle a08482dfd0 fix bug 2026-08-05 16:52:48 +02:00
stefankoelle 3779c4c73a web badge smaller 2026-08-05 16:48:06 +02:00
stefankoelle 9458a88122 web admin mode 2026-08-05 16:44:10 +02:00
stefankoelle c2d5ae45a2 web photo layout update 2026-08-05 16:33:45 +02:00
stefankoelle a1d4c9eacb sync photo and display photo 2026-08-05 15:56:16 +02:00
stefankoelle 8a653ca395 sync social_profiles fix 2026-08-05 15:44:37 +02:00
stefankoelle 54a0624c17 last sync with changes no duplicate 2026-08-05 15:32:23 +02:00
stefankoelle 3017be812d web mark birthdays that are today 2026-08-05 15:23:12 +02:00
stefankoelle 4f27cc596e last sync with changes on dashboard 2026-08-05 15:20:05 +02:00
stefankoelle 85f6e79a7f web layout fix 3 2026-08-05 15:10:44 +02:00
stefankoelle a39fe83fe1 web layout fix 2 2026-08-05 07:51:43 +02:00
stefankoelle 2c10d24985 web layout fix 2026-08-05 07:33:14 +02:00
stefankoelle 55a4721da1 web header contact details 2026-08-05 07:13:59 +02:00
stefankoelle 560b38b6a3 web header dashboard 2026-08-05 07:01:32 +02:00
stefankoelle 1561a59627 web header 2026-08-05 06:54:36 +02:00
stefankoelle 8edc339b29 db full_name fallback 2026-08-05 06:32:35 +02:00
stefankoelle 375937d8c5 web display age 2026-08-05 06:12:59 +02:00
stefankoelle cf3563124f web dashboard 2026-08-05 05:56:28 +02:00
stefankoelle af922f23ba LICENSE 2026-08-05 02:29:18 +02:00
stefankoelle 5ed6210f8f favicon 2026-08-05 02:20:41 +02:00
stefankoelle 50f5dcb1d9 web detail fix 2026-08-05 02:09:37 +02:00
stefankoelle 7ff0ad5570 web detail view 2026-08-05 02:07:05 +02:00
stefankoelle a088d0f4e3 new layout 2026-08-05 01:57:13 +02:00