Commit Graph
123 Commits
Author SHA1 Message Date
stefankoelle 7b1acbb8bb related mapping 2026-08-10 22:54:44 +02:00
Stefan Koelle af124d803f Merge pull request #2 from skoelle/renovate/major-github-actions
chore(deps): update github actions (major)
2026-08-10 20:24:06 +02:00
renovate[bot] a05a8da3f1 chore(deps): update github actions 2026-08-10 18:20:26 +00:00
stefankoelle e966157f15 fix: update TemplateResponse calls for Starlette 0.31+ compatibility 2026-08-10 20:09:24 +02:00
stefankoelle 2dd93d8d68 chore: update dependencies and add Renovate config 2026-08-10 19:52:58 +02:00
stefankoelle fcaa74f774 demo showcase 2026-08-10 17:42:13 +02:00
stefankoelle 28bfbc01bf screenshot 2026-08-10 17:35:24 +02:00
stefankoelle 1b4892109a fix prefix anomaly 2026-08-07 23:43:44 +02:00
stefankoelle 7bf3a0dabc contact detail fix fullname builder 2026-08-07 23:39:22 +02:00
stefankoelle 047766df86 birthday testmail when most contacts 2026-08-07 21:37:50 +02:00
stefankoelle 5e1a2b0b92 birthday mail for each account 2026-08-07 21:31:53 +02:00
stefankoelle b9c6c99120 sync healthcheck documentation 2026-08-07 21:01:48 +02:00
stefankoelle 94fcd5f685 sync healthcheck feature 2026-08-07 20:56:12 +02:00
stefankoelle 838619e392 feature in roadmap 2026-08-07 20:31:40 +02:00
stefankoelle 323432eb14 ui: sorting upcoming birthdays 2026-08-07 19:59:24 +02:00
stefankoelle 1caab5ebf0 ui: sorting 2026-08-07 19:58:09 +02:00
stefankoelle 83eb8d3544 ui: contact detail box layout 2026-08-07 19:03:02 +02:00
stefankoelle 7e59451d47 ui: special searches on mobile 2026-08-07 19:00:59 +02:00
stefankoelle a5f623d75c revert: JSON-LD entfernt (nutzlos hinter Authelia)
Die Seiten sind hinter Authelia geschützt, Google kann sie nicht
 crawlen. JSON-LD bringt dort nichts.
2026-08-07 16:29:36 +02:00
stefankoelle 036122ab20 feat: JSON-LD Structured Data + Maps-Icon für Adressen
- JSON-LD im <head> mit schema.org PostalAddress für Google Rich Results
- Maps SVG-Icon (Pin) neben Adressen wenn Straße + Ort vorhanden
- Link öffnet Google Maps Suche im neuen Tab
2026-08-07 16:16:20 +02:00
stefankoelle 5abeb2e9d2 ui: Gruppen-Tags auf Kontakt-Detailseite wie Sidebar-Cloud
Hover-Effekt und einheitliches Padding für Gruppen-Tags auf der
Kontakt-Detailseite, identisch zur Sidebar-Cloud.
2026-08-07 16:10:07 +02:00
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 30d8203d55 lint preferences 2026-08-07 16:03:52 +02:00
stefankoelle aa01f47d92 web group cloud 2026-08-07 15:54:34 +02:00
Stefan Koelle b3ecba76de Merge pull request #1 from skoelle/feature/icloud-contact-groups
feat: iCloud-Kontaktgruppen synchronisieren und API-Endpunkte hinzufügen
2026-08-07 15:39:35 +02:00
stefankoelle 57739f99a4 fix: group_members beim Kontakt-Löschen bereinigen
Neue Funktion delete_group_members_by_uids in db.py entfernt
Member-Einträge aus group_members wenn ein Kontakt gelöscht wird.
Nutzt JOIN über groups Tabelle für Account-Scoping.
Doku in README.md aktualisiert.
2026-08-07 15:33:31 +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 38b03a2c8a mail layout imp 7 2026-08-07 15:04:51 +02:00
stefankoelle 0e788a3b9d mail layout imp 6 2026-08-07 14:56:03 +02:00
stefankoelle 3dfff404b9 sidebar improve 2026-08-07 14:51:00 +02:00
stefankoelle 5da259141d mail layout imp 5 2026-08-07 14:48:14 +02:00
stefankoelle 6d6a8cf9e0 dashboard sidebar 2026-08-07 14:45:04 +02:00
stefankoelle d6d3ceaa83 mail layout imp 4 2026-08-07 14:41:55 +02:00
stefankoelle 954f1fbd3a mail layout imp 3 2026-08-07 14:36:04 +02:00
stefankoelle e34a8ee64b mail layout imp 2 2026-08-07 14:25:52 +02:00
stefankoelle 8c1f421d39 mail layout improvements 2026-08-07 14:18:56 +02:00
stefankoelle 32c6bf6908 also on web 2026-08-07 13:57:20 +02:00
stefankoelle 081fe9bfa0 some fixes 2026-08-07 13:56:58 +02:00
stefankoelle 14b2101b9f unknown year dashboard fix 2026-08-07 13:41:35 +02:00
stefankoelle af41f45a98 mail test method docker-compose mapping 2026-08-07 13:38:12 +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 d458c58c64 timezone config docker-compose 2026-08-07 13:14:04 +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 e3ca295ebd mail only when some has birthday 2026-08-07 11:47:57 +02:00
stefankoelle 744c71400d sync fullsync fix 2 2026-08-06 22:15:25 +02:00
stefankoelle c457e5a78a sync fullsync fix after update with get 2026-08-06 22:01:51 +02:00