25ed765a03
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
434 lines
20 KiB
Markdown
434 lines
20 KiB
Markdown
# Pyramid — Feature-Checklist & Implementierungsstand
|
|
|
|
> Stand: Mai 2026
|
|
> Legende: ✅ Fertig | ⚠️ Teilweise / Bug | ❌ Fehlt | 🔧 In Arbeit
|
|
|
|
---
|
|
|
|
## Inhaltsverzeichnis
|
|
- [Authentifizierung](#authentifizierung)
|
|
- [Raumliste](#raumliste)
|
|
- [Chat / Timeline](#chat--timeline)
|
|
- [Nachrichtentypen](#nachrichtentypen)
|
|
- [Nachrichtenfunktionen](#nachrichtenfunktionen)
|
|
- [Direct Messages](#direct-messages)
|
|
- [E2EE Verschlüsselung](#e2ee-verschlüsselung)
|
|
- [Push Notifications](#push-notifications)
|
|
- [VoIP & Calls](#voip--calls)
|
|
- [Settings / Einstellungen](#settings--einstellungen)
|
|
- [Benutzerprofil](#benutzerprofil)
|
|
- [Raum-Einstellungen](#raum-einstellungen)
|
|
- [Suche](#suche)
|
|
- [Medien](#medien)
|
|
- [Read Receipts & Typing](#read-receipts--typing)
|
|
- [Spaces](#spaces)
|
|
- [Windows / Desktop](#windows--desktop)
|
|
- [Sonstige Features](#sonstige-features)
|
|
- [Dokumentations-Vollständigkeit](#dokumentations-vollständigkeit)
|
|
|
|
---
|
|
|
|
## 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.dart` — `client.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.dart` → `startDirectChat()` |
|
|
| 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)
|
|
4. **Nachricht löschen (Redact)** — Long-Press-Menü → `event.redactEvent()`
|
|
5. **Nachricht bearbeiten** — Edit-Modus im Composer → `sendTextEvent(editEventId:...)`
|
|
6. **Raum-Einstellungen** — Name/Thema/Avatar für normale Räume (`room.setName()` etc.)
|
|
7. **Profil bearbeiten** — Displayname + Avatar in Settings
|
|
8. **Registrierung** — Account-Erstellung im Onboarding
|
|
|
|
### 🟡 Sinnvoll (mittelfristig)
|
|
9. **Einladungen-Screen** — Pending invites sichtbar darstellen
|
|
10. **Kick/Ban UI** — Moderation aus der Mitgliederliste
|
|
11. **Device-Verwaltung** — Eigene Sessions anzeigen + löschen
|
|
12. **Rich-Text-Editor** — Markdown/Formatierung in Nachrichten
|
|
13. **Klingelton bei eingehendem Call** — Audio + dedizierter Klingel-Screen
|
|
14. **Lautlos/Stumm per Raum** — Push-Rules im UI
|
|
|
|
### 🟢 Nice-to-have
|
|
15. Sprachnachrichten aufnehmen
|
|
16. HTML-Nachrichtenrendering (`flutter_html`)
|
|
17. Matrix-URI Deep-Links
|
|
18. Media-Galerie pro Raum
|
|
19. System Tray (Windows)
|
|
20. Polls / Abstimmungen
|