Files
Bernd Steckmeister 25ed765a03 wip: Sicherungs-Commit aller Änderungen seit April + Arbeitsstruktur (CLAUDE.md, ROADMAP.md, PROGRESS.md, Autopilot)
6 Wochen uncommittete Arbeit (Voice-Channels, LiveKit-Manager, Settings-Modal u.v.m.)
als ein WIP-Commit gesichert, damit nichts verloren geht und der Pi den aktuellen
Stand klonen kann. Thematische Aufarbeitung: siehe ROADMAP M0.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPrAGBxBT6GfPXzeWQ4AXb
2026-07-03 05:47:18 +02:00

20 KiB

Pyramid — Feature-Checklist & Implementierungsstand

Stand: Mai 2026
Legende: Fertig | ⚠️ Teilweise / Bug | Fehlt | 🔧 In Arbeit


Inhaltsverzeichnis


Authentifizierung

Feature Status Details / Datei
Login mit Passwort login_page.dart, login_notifier.dart
Homeserver-Auswahl server_page.dart — HTTPS-Prefix fix, .well-known Autodiscovery
Session wiederherstellen (init) matrix_client.dartclient.init() beim App-Start
Logout Via Matrix SDK client.logout()
Login-Redirect nach Init router.dart — StreamProvider-basierter Guard
SSO / OAuth Nicht implementiert
Registrierung / Account erstellen Keine UI
Login mit Token Nur Passwort-Login
Multi-Account Nur ein Account gleichzeitig
UIAA Re-Auth (Passwort ändern) Kein UI

Raumliste

Feature Status Details / Datei
Raumliste anzeigen rooms_page.dart, room_list_item.dart
Sortierung nach letzter Aktivität In rooms_provider.dart
Avatar-Anzeige (MXC) mxc_image.dart
Vorschautext (letztes Event) room_list_item.dart
Ungelesen-Badge notificationCount
Ungelesen-Punkt (kein Count) Bei notificationCount == 0 aber ungelesen
Zeitstempel-Formatierung Heute: HH:MM, andere: DD.MM
DM-Erkennung (isDirectChat) Typ-Differenzierung in Liste
Space-Filterung SpacesRail filtert nach aktiver Space
Einladungen anzeigen ⚠️ Membership.invite vorhanden, gesonderte Ansicht fehlt
Raum suchen / filtern Via search_modal.dart
Archivierte Räume Kein UI für left-rooms
Raum erstellen (Knopf) create_join_dialog.dart
Raum beitreten (Alias) create_join_dialog.dart

Chat / Timeline

Feature Status Details / Datei
Nachrichten anzeigen message_bubble.dart, message_group.dart
Gruppen-Bubbles (gleicher Sender) Continuation-Nachrichten (eingerückt, kein Avatar)
Datums-Trenner Tagstrennlinie
Ungelesen-Trenner ("Neue Nachrichten") fullyRead-Position
Scroll-to-Unread beim Öffnen chat_view.dart
History-Nachladen beim Scrollen _onScroll()requestHistory(60)
Optimistische Nachrichtenanzeige SDK fügt Event mit Status sending ein
Nachrichtenstatus (senden/sent) Uhren-Icons
Timeline-Cleanup (cancelSubscriptions) In dispose()
Sprung zu bestimmtem Event ⚠️ Infrastruktur vorhanden, kein UI
Event-Suche in Timeline Nur globale Suche

Nachrichtentypen

Typ Status Details
Text (m.text) Vollständig
Bild (m.image) Thumbnail + Vollansicht mit Zoom
Video (m.video) Playback via media_kit
Audio (m.audio) Player mit Progress/Dauer
Datei (m.file) Download mit MIME-Icon
Sticker (m.sticker) Anzeige und Senden (Sticker-Picker)
Sprachnachricht (MSC3245) ⚠️ Audio-Aufnahme fehlt, Abspielen funktioniert
Standort (m.location) Nicht implementiert
Emote (m.emote) Kein gesondertes Rendering
Poll (MSC3381) Nicht implementiert
Verschlüsselte Nachrichten Automatisch via SDK, Fehler-UI vorhanden
Redacted-Events ⚠️ Wird angezeigt, kein "Nachricht gelöscht"-Platzhalter

Nachrichtenfunktionen

Feature Status Details / Datei
Antworten (Reply) Swipe-Geste + Quote-Anzeige
Reaktionen (Emojis) Quick-Picker + vollständiger Emoji-Picker
Reaktionen entfernen ⚠️ UI zum Entfernen fehlt
Nachrichten bearbeiten (Edit) ⚠️ getDisplayEvent() vorhanden, Senden nicht im UI
Nachricht löschen (Redact) Kein Button / Dialog
Threads Nicht implementiert
Polls Nicht implementiert
Weitersenden (Forward) Nicht implementiert
Kopieren (Text) ⚠️ Nicht explizit sichtbar
Long-Press Auswahl-Modus message_bubble.dart — Long-Press aktiviert Selection
Bulk-Aktionen (Auswahl) ⚠️ Modus vorhanden, Aktionen begrenzt
Pinned Messages Panel pinned_messages_panel.dart
Pins setzen (UI-Aktion) Kein Pin-Button in Nachricht
Linkvorschau Keine URL-Preview
Mention-Links klickbar @user-Links via url_launcher

Direct Messages

Feature Status Details / Datei
Neuen DM starten new_dm_dialog.dartstartDirectChat()
User-Verzeichnis-Suche searchUserDirectory()
DM-Erkennung in Raumliste room.isDirectChat
Partner-Avatar/Name directChatMatrixID → Profil laden
DM-Verschlüsselung Standard E2EE bei DM-Erstellung
Gruppen-DM ⚠️ Erstellbar, kein gesondertes UI
DM vergessen / verlassen ⚠️ Kein UI-Button
DM-spezifische Notification-Sounds Nicht implementiert

E2EE Verschlüsselung

Feature Status Details / Datei
Vodozemac Rust-Crypto flutter_vodozemac initialisiert in matrix_client.dart
E2EE in verschlüsselten Räumen Automatisch via SDK
Bootstrap-Flow (SSSS + Cross-Signing) bootstrap_dialog.dart — vollständige State-Machine
Cross-Signing Setup Master-, Self- und User-Signing-Key Erstellung
Key Backup (online) SSSS-gesichertes Backup
Schlüssel-Verifikation (SAS/Emoji) Via Bootstrap-Flow
QR-Code-Verifikation ⚠️ SDK-Support vorhanden, kein UI
Device-Liste anzeigen Kein UI
Gerät sperren/blockieren Kein UI
Fehlende Schlüssel anfordern requestMissingSessionKeys() bei Bad-Encrypted
Entschlüsselungs-Fehler-UI "Nachricht konnte nicht entschlüsselt werden" + Schlüssel-Button
Schlüssel importieren/exportieren Kein UI (Infrastruktur vorhanden)

Push Notifications

Feature Status Details / Datei
FCM Token Registrierung fcm_push_service.dart
Pusher auf Homeserver postPusher() mit Sygnal-Gateway
Token-Refresh Handling onTokenRefresh.listen()
PushService.kt (native FCM) Läuft auch bei geschlossener App
Benachrichtigung bei geschlossener App 🔧 APK neu gebaut, noch nicht getestet
Absender-Name in Notification HTTP-Fetch von Matrix API in PushService.kt
Verschlüsselte Nachricht entschlüsseln ⚠️ "Neue Nachricht" bei geschlossener App; decryptAndUpdateNotification bei Hintergrund-App
Inline Reply in Notification 🔧 ReplyReceiver auf getActivity umgestellt — APK gebaut, ungetestet
Antwort wirklich abschicken 🔧 replyFromNotification MethodChannel — APK gebaut, ungetestet
Gelesen-Button in Notification ACTION_DISMISS über ReplyReceiver.kt
Notification bei Hintergrund-App Heartbeat-Check verhindert Duplikate
Notification-Kanal Android pyramid_messages, HIGH Importance
Stabile Notification-ID stableId(roomId) — gleicher Algo in Kotlin + Dart
Windows Notification local_notifier (Windows Toast)
Windows Taskbar Flash WindowsTaskbar.setProgressMode()
Ausstehende Reply beim App-Öffnen senden _sendPendingReply() bei Resume + Sync
Push Rules konfigurieren Kein UI
Raum stumm schalten Kein UI
Nur-Erwähnung-Modus notifMentionOnlyDmProvider — Preferences
iOS Push Kein iOS-Build
Web Push Kein Web-Build

VoIP & Calls

Feature Status Details / Datei
Matrix WebRTC Legacy-Calls voip_manager.dart — CallSession
LiveKit SFU-Calls livekit_call_manager.dart
Unified Call-UI voice_channel.dart
Audio-Call Mikrofon + Speaker
Video-Call Kamera + Remote-Video
Screen-Sharing screen_share_picker.dart
Video-Qualitätsstufen SD/HD/FHD/4K Presets
Mute-Toggle setMicrophoneEnabled()
Deafen-Toggle Audio komplett stumm
Kamera-Toggle setCameraEnabled()
Kamera-Wechsel (Front/Rück) ⚠️ SDK-Support vorhanden
Teilnehmer-Grid Mehrere Participants anzeigen
Lokale Video-Vorschau Overlay-Widget
Klingel-System (to-device) ⚠️ Infrastruktur vorhanden, Klingelton fehlt
Incoming-Call-UI ⚠️ Kein dediziertes Klingel-Screen
Call-History Nicht implementiert
TURN-Server via Matrix ⚠️ getTurnServer() — ob konfiguriert unklar
Hintergrund-Foreground-Service FlutterForegroundService via webrtc
MatrixRTC Membership-Events io.pyramid.voice.presence State-Events
LiveKit-Token-Exchange livekit_token.dart

Settings / Einstellungen

Feature Status Details / Datei
Settings-Seite (Hauptseite) ⚠️ settings_page.dart — NUR PLATZHALTER
Settings Modal settings_modal.dart — vollständiger Modal
Dark/Light Mode themeModeProvider + Toggle
Akzentfarbe (5 Presets) Amber/Coral/Mint/Violet/Cobalt/Lime
Eckenradius Slider radiusProvider
UI-Motion Toggle motionProvider
UI-Density Toggle densityProvider
Desktop Notifications notifDesktopProvider
Notification Sound notifSoundProvider
Nachrichtenvorschau notifPreviewProvider
Nur-Erwähnung-Modus notifMentionOnlyDmProvider
Presence anzeigen (Online) privacyPresenceProvider
Read Receipts senden privacyReadReceiptsProvider
Typing-Indikator senden privacyTypingProvider
Profil bearbeiten (Name/Avatar) Kein UI
Geräte-Verwaltung Kein UI
Session-Liste Kein UI
Passwort ändern Kein UI
Account löschen Kein UI
Raumspezifische Benachrichtigungen Kein UI
Sprache / Lokalisierung Nur Systemsprache
Barrierefreiheit Keine Einstellungen

Benutzerprofil

Feature Status Details / Datei
Avatar anzeigen (MXC) mxc_image.dart überall
Displayname auflösen Fallback auf @username
Online-Präsenz senden setPresence(online) alle 10s in app_shell.dart
Präsenz-Anzeige anderer User ⚠️ Infrastruktur, kein UI
Profil-Popover (Hover-Karte) profile_popover.dart
Eigenes Profil bearbeiten Kein UI
Avatar hochladen Kein UI
Status-Nachricht Nicht implementiert
User ignorieren / blockieren Kein UI
User melden Kein UI

Raum-Einstellungen

Feature Status Details / Datei
Space-Admin Panel (Name/Avatar/Banner) space_admin_dialog.dart — Overview-Tab
Power-Level-Editor (Mitglieder) space_admin_dialog.dart — Members-Tab
Permissions-Tab (Raum-PLs) space_admin_dialog.dart — Permissions-Tab
Kind-Räume verwalten space_admin_dialog.dart — Channels-Tab
Raum-Name ändern (normaler Raum) Kein UI
Raum-Thema ändern Kein UI
Raum-Avatar ändern Kein UI
Join-Rules ändern Kein UI
History-Visibility ändern Kein UI
E2EE aktivieren Kein UI
Raum-Alias verwalten Kein UI
Raum verlassen (Button) Kein UI
Raum vergessen (forget) Kein UI
User einladen (aus Chat) Kein UI
Kick / Ban (Moderation) Kein UI

Suche

Feature Status Details / Datei
Server-seitige Nachrichtensuche search_modal.dart/search API
Lokale Raum-/DM-Suche Filter auf client.rooms
Personen-Suche Lokale DM-Partner-Suche
Medien-Filter (Bilder/Videos/Audio) search_modal.dart
Paginierung (nextBatch) Infinite scroll
Suchergebnis-Highlighting Suchbegriff hervorheben
Debounced Query (400ms) debounce in Suchfeld
Öffentliches Raumverzeichnis Kein UI zum Entdecken
User-Verzeichnis-Suche (global) In new_dm_dialog.dart

Medien

Feature Status Details / Datei
Bild senden MatrixImageFile + Upload
Bild anzeigen (Thumbnail + Vollbild) MediaViewer mit Zoom/Pan
Video senden
Video abspielen media_kit
Audio senden
Audio abspielen Player mit Progress
Datei senden MatrixFile
Datei herunterladen MIME-Icon + Browser-Öffner
Clipboard-Bild einfügen (Windows) FFI + clipboard_image.dart
Drag & Drop Upload (Desktop) desktop_drop
GIF-Picker (Giphy) Trending + Suche + Favoriten
Sticker-Picker Pack-Browser
Bild-Komprimierung shrinkImageMaxDimension
Verschlüsselte Medien Automatisch bei E2EE-Räumen
Sprachnachricht aufnehmen Kein Recorder
Kamera direkt (in App) Nur Gallery-Picker
Dokument-Vorschau Kein PDF-Viewer
Media-Galerie (Raum-Mediathek) Kein UI

Read Receipts & Typing

Feature Status Details / Datei
Read Receipts senden setReadMarker() (privacy-gesteuert)
Eigene ✓✓ Bestätigung Anzeige auf eigenen Nachrichten
Read-Marker anderer anzeigen ⚠️ Position-Marker vorhanden, kein Avatar-Stack
Typing-Indikator senden 7s Auto-Timeout
Typing-Indikator empfangen Anzeige-Platzhalter
Typing-User-Namen anzeigen ⚠️ Platzhalter, keine Namen

Spaces

Feature Status Details / Datei
Space-Erkennung (isSpace)
Spaces-Rail (Sidebar) spaces_rail.dart
Space-Filterung der Raumliste Nur Räume der aktiven Space
Space-Admin Panel space_admin_dialog.dart
Space erstellen create_join_dialog.dart
Kind-Räume hinzufügen In Space-Admin
Kind-Räume entfernen In Space-Admin
Voice-Präsenz in Space io.pyramid.voice.presence Events
Space-Banner Mit Crop-Dialog
Verschachtelte Spaces ⚠️ Anzeige, kein eigener Sub-Space-Rail
Space beitreten (öffentlich) ⚠️ Technisch möglich, kein Discovery-UI

Windows / Desktop

Feature Status Details / Datei
Windows Build CMake + MSIX
Windows Notifications local_notifier
Taskbar Flash WindowsTaskbar
Update-Checker (Gitea API) update_checker.dart — 4h Intervall
Update-Banner update_banner.dart
Update-Download update_download_dialog.dart
APK Auto-Install (Android) Kotlin MethodChannel + FileProvider
PC Update (exe/msix) Download ⚠️ Release-Script pusht .zip statt .exe → öffnet Git-Seite
Drag & Drop desktop_drop
Clipboard Paste (Bild) FFI Windows API
Resizable Sidebar panel_layout.dart — Drag-Divider
Keyboard Shortcuts ⚠️ Enter zum Senden, Ctrl+V — kein vollständiges System
System Tray Nicht implementiert
Fenster-Badge (ungelesen) ⚠️ Nur Taskbar-Flash, kein Zähler
macOS / Linux Nicht gebaut/getestet

Sonstige Features

Feature Status Details / Datei
Emoji-Picker Kategorisiert + Suche
Quick-Reaktionen (6 Emojis) Hover-Aktionsleiste
Mitglieder-Panel (Raum) members/ — Teilnehmerliste
Profil-Popover (Hover) profile_popover.dart
Neuer-DM Dialog new_dm_dialog.dart
Raum-erstellen Dialog create_join_dialog.dart
Nachricht-Auswahl-Modus Long-Press
Reply-Swipe-Geste Rechts-wischen zum Antworten
Immersive-Mode (Android) Status-Bar ausgeblendet
PyramidLoader (Ladeanimation) pyramid_loader.dart
Rich-Text-Editor Kein Markdown/Formatting-UI
HTML-Nachrichtenrendering Kein flutter_html
Message Forwarding
Nachrichtenübersetzung
Bot-Kommandos (/)
Matrix-URI Handler Kein Deep-Link-Handler
Barcode/QR-Scanner ⚠️ Nur in Verifikation

Dokumentations-Vollständigkeit

Doku-Abschnitt Vollständig Anmerkungen
01 Auth SSO, UIAA, alle Login-Flows
02 Räume Create, Join, Spaces, Power Levels
03 Nachrichten Text, Replies, Edits, Threads, Polls
04 DMs Alle DM-Flows
05 Medien Upload, Download, alle Dateitypen
06 E2EE Setup, SAS, Cross-Signing, Key Backup
07 Push FCM, Push Rules, Pyramid-Architektur
08 VoIP Legacy m.call, MatrixRTC
08b LiveKit KOMPLETT — Server-Setup bis Flutter-UI
09 Profil Presence, Account-Data, Tags
10 Room-Admin Power Levels, Moderation, ACL, Synapse Admin
11 Suche Event-Suche, User-Suche, Raumverzeichnis
12 Schnellreferenz Alle Enums, Widget-Patterns, Fehlerhandling

Prioritäts-Roadmap

🔴 Kritisch (bald testen/fixen)

  1. Notification-Reply testen — Neue APK (getActivity-Fix) installieren und Reply-Flow verifizieren
  2. Benachrichtigung bei geschlossener App — Mit neuer APK testen (PushService.kt Ansatz)
  3. PC Update-Script.zip durch .exe-Installer ersetzen in scripts/release.ps1

🟠 Wichtig (nächste Features)

  1. Nachricht löschen (Redact) — Long-Press-Menü → event.redactEvent()
  2. Nachricht bearbeiten — Edit-Modus im Composer → sendTextEvent(editEventId:...)
  3. Raum-Einstellungen — Name/Thema/Avatar für normale Räume (room.setName() etc.)
  4. Profil bearbeiten — Displayname + Avatar in Settings
  5. Registrierung — Account-Erstellung im Onboarding

🟡 Sinnvoll (mittelfristig)

  1. Einladungen-Screen — Pending invites sichtbar darstellen
  2. Kick/Ban UI — Moderation aus der Mitgliederliste
  3. Device-Verwaltung — Eigene Sessions anzeigen + löschen
  4. Rich-Text-Editor — Markdown/Formatierung in Nachrichten
  5. Klingelton bei eingehendem Call — Audio + dedizierter Klingel-Screen
  6. Lautlos/Stumm per Raum — Push-Rules im UI

🟢 Nice-to-have

  1. Sprachnachrichten aufnehmen
  2. HTML-Nachrichtenrendering (flutter_html)
  3. Matrix-URI Deep-Links
  4. Media-Galerie pro Raum
  5. System Tray (Windows)
  6. Polls / Abstimmungen