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
This commit is contained in:
@@ -0,0 +1,433 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user