6400fb639c
message_bubble.dart war vollständig unbenutzt (durch message_group.dart abgelöst). Die zwei identischen _formatTime-Methoden in message_group.dart zu einer Top-Level-Funktion zusammengeführt - reine Extraktion, keine Verhaltensänderung. flutter analyze bleibt sauber.
134 lines
8.3 KiB
Markdown
134 lines
8.3 KiB
Markdown
# Pyramid – Roadmap
|
||
|
||
Die lange Liste. Wird von oben nach unten abgearbeitet (Arbeitszyklus siehe `CLAUDE.md`).
|
||
Reihenfolge = Priorität: erst Ordnung & Sicherheit (Datenverlust-Risiken!), dann das
|
||
große Refactoring, dann Calls/Streaming/Chat-Features, dann Feinschliff.
|
||
Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert.
|
||
|
||
## M0 – Backup & Ordnung
|
||
|
||
- [x] Vollbackup vor dem Refactoring (2026-07-03 → `MatrixPi\backups\pyramid-kopie_backup_2026-07-03.tar.gz`)
|
||
- [x] Die ~140 uncommitteten Dateien sichten, in thematische Commits aufteilen, zu Gitea pushen
|
||
(Sicherungs-Commit 25ed765 + Folge-Commits bis 74d38fd; Arbeitsbaum ist jetzt sauber)
|
||
- [x] `flutter analyze` komplett sauber bekommen und sauber halten (nur noch 1 bewusst
|
||
zurückgestellter Hinweis, siehe PROGRESS.md 2026-07-03)
|
||
- [x] `lib/features/call/` vs. `lib/features/calls/` (leer?) klären – Leiche entfernen
|
||
(geprüft: `calls/` existiert nicht mehr, nur `call/` mit den echten Dateien)
|
||
- [x] README.md durch echte Projektbeschreibung ersetzt (74d38fd)
|
||
|
||
## M1 – Sicherheit: Nie wieder aussperren / kein Datenverlust
|
||
|
||
- [x] **Uta-Random-Logout untersuchen:** UNGETESTET (Pi) – Ursache im matrix-SDK
|
||
gefunden + Fix committet (63e4919, 9dc83f7), siehe PROGRESS.md 2026-07-03.
|
||
Nächster PC-Lauf MUSS den vollen Kreislauf praktisch prüfen (Login →
|
||
Nachrichten → Logout → erneuter Login → alte Nachrichten lesbar?), erst
|
||
dann gilt der Punkt als wirklich erledigt.
|
||
- [x] **REGRESSION: Push-Benachrichtigungen werden nicht mehr entschlüsselt** –
|
||
UNGETESTET (Pi), sehr wahrscheinlich DIESELBE Ursache wie der
|
||
Uta-Random-Logout-Bug (bereits mit 9dc83f7 mitgefixt), siehe PROGRESS.md
|
||
2026-07-03. Auf echtem Gerät prüfen: nach Neu-Login (für den Refresh-Token)
|
||
eine Weile laufen lassen und beobachten, ob Push-Nachrichten wieder mit
|
||
echtem Text statt nur „Neue Nachricht"-Platzhalter ankommen. Falls das
|
||
Problem weiterhin auftritt, liegt eine zweite, unabhängige Ursache vor
|
||
(z. B. fehlende Megolm-Schlüssel/Key-Sharing) – dann `docs/NOTIFICATIONS.md`
|
||
+ Memory „Pyramid Push" erneut konsultieren und die dort gelisteten 3
|
||
Fallstricke der Hintergrund-Entschlüsselung gegenprüfen.
|
||
- [ ] **Sichere Speicherung von Access-Token & Krypto-DB: LÜCKE GEFUNDEN.**
|
||
`sqlcipher_flutter_libs` steht zwar in `pubspec.yaml`, wird aber nirgends
|
||
benutzt – `matrix_client.dart` und `background_push.dart` öffnen die
|
||
`pyramid.sqlite` (Access-Token, gepickelter Olm-Account, Nachrichten) über
|
||
den normalen `sqflite`/`sqflite_common_ffi`-Factory, also **unverschlüsselt**
|
||
auf der Platte. Bewusst NICHT blind auf dem Pi gefixt: eine Umstellung auf
|
||
SQLCipher braucht eine Migration für bereits bestehende Klartext-DBs
|
||
(Utas Gerät!) – ohne Testgerät hier zu riskant für „Kein Datenverlust".
|
||
Siehe PROGRESS.md 2026-07-03 + Frage an Bernd.
|
||
- [x] Key-Backup einrichten-Flow: bereits vorhanden (`bootstrap_dialog.dart`,
|
||
wird automatisch getriggert wenn Cross-Signing fehlt, `app_shell.dart`)
|
||
- [x] Key-Backup wiederherstellen-Flow: bereits vorhanden (`bootstrap_dialog.dart`,
|
||
`BootstrapState.askUnlockSsss` fragt nach Recovery-Key auf neuem Gerät)
|
||
- [x] Logout-Schutz: Warnung mit Klartext-Folgen, wenn Key-Backup fehlt (b5762ea)
|
||
- [x] Geräte-/Sessionverwaltung in den Einstellungen: bereits vorhanden
|
||
(`_SessionsSection` in `settings_modal.dart` – Liste, Umbenennen, Verifizieren
|
||
per SAS/QR, Abmelden, Massen-Abmeldung mit Passwort-Reauth)
|
||
- [ ] Härtetest dokumentieren: Login → Nachrichten → Logout → Login neu → alles noch lesbar
|
||
(gehört zum ausstehenden PC-Praxistest der beiden Bugfixes oben)
|
||
|
||
## M2 – Das große Refactoring (erst nach M0/M1!)
|
||
|
||
Ziel: gleiche Funktionen, saubere **modulare** Struktur – als Fundament für alles Folgende.
|
||
Leitprinzip (Bernd): austauschbare Bausteine – jedes Modul muss sich komplett neu schreiben
|
||
lassen, ohne dass andere Module angefasst werden müssen.
|
||
|
||
- [x] Ist-Analyse geschrieben (PROGRESS.md 2026-07-03): Gott-Datei `settings_modal.dart`
|
||
(5541 Zeilen/50+ Klassen), Call-Schicht ohne gemeinsame Fassade (4 Module
|
||
importieren `voice_channel.dart` direkt), `app_state.dart` als Kopplungspunkt
|
||
aller Features, keine gemeinsame Storage-Schnittstelle (12 direkte
|
||
`SharedPreferences`-Zugriffe), toter Code (`message_bubble.dart`) + Duplikate
|
||
(`_formatTime`/`_formatDate` 3-fach). 8 Modul-Kandidaten dokumentiert.
|
||
- [x] Modul-Schnitt definiert (`docs/M2_MODULE_SCHNITT.md`, PROGRESS.md 2026-07-03):
|
||
„Calls" ist architektonisch zwei getrennte Module (`call_signaling` =
|
||
Matrix-1:1-VoIP, `voice_channel` = LiveKit-SFU-Kanäle) + `call_ui`;
|
||
außerdem `settings` (aufgesplittet), `verification` (neu, aus Settings
|
||
herausgelöst), `storage` (Ausbau `settings_prefs.dart`), `auth`, `push`,
|
||
`chat_timeline`/`rooms`. Umsetzungsreihenfolge vorgeschlagen, wartet auf
|
||
Bernds Go für den Call-Pilot (Frage in PROGRESS.md).
|
||
- [ ] Call-Schicht entwirren: EINE klare Zuständigkeit pro Klasse (Signalisierung /
|
||
LiveKit-Verbindung / UI-State sauber getrennt)
|
||
- [ ] Einheitliches State-Management (Riverpod konsequent, keine Misch-Patterns)
|
||
- [ ] Toten Code & Duplikate entfernen, Ordnerstruktur vereinheitlichen
|
||
(angefangen, PROGRESS.md 2026-07-03: `message_bubble.dart` tot entfernt,
|
||
doppelte `_formatTime` in `message_group.dart` zusammengeführt – weitere
|
||
Fundstellen aus der Ist-Analyse noch offen, Ordnerstruktur noch nicht angefasst)
|
||
- [ ] Nach JEDEM Schritt: App läuft, Kernflows getestet, Commit
|
||
|
||
## M3 – Calls: Logik, UI & Audio (Discord als Referenz)
|
||
|
||
- [ ] Voice-Channel-Logik robust machen: Beitreten/Verlassen/Wechseln ohne Hänger,
|
||
klarer Zustand wer drin ist, sauberes Verhalten bei Verbindungsabbruch
|
||
- [ ] Call-UI aufräumen: aufgeräumter, intuitiver, konsistent (Mini-Call-Widget, Vollansicht)
|
||
- [ ] **Windows: Audiogeräte-Erkennung reparieren** (Mikrofon/Ausgabe erkennen und in den
|
||
Einstellungen auswählbar machen – geht aktuell gar nicht)
|
||
- [ ] Noise Suppression als optionale Einstellung (z. B. RNNoise/LiveKit-Audio-Filter)
|
||
- [ ] Lautstärke pro Teilnehmer einstellbar (Discord-Style, persistent pro Nutzer)
|
||
- [ ] Weitere Feinjustierung: Eingangsempfindlichkeit/Gate, Echo-Unterdrückung an/aus,
|
||
Push-to-Talk prüfen – von Discords Sprach-Einstellungen inspirieren lassen
|
||
- [ ] Anruf-Benachrichtigung auch bei gekillter App (Push-Architektur nutzen)
|
||
|
||
## M4 – Streaming (Bildschirmübertragung)
|
||
|
||
- [ ] **Framerate verbessern:** Ursache messen (Encoder? Auflösung? Simulcast-Settings?
|
||
Software- statt Hardware-Encoding?), dann gezielt fixen
|
||
- [ ] Auflösung/Qualität wählbar für den **Streamer** (z. B. 720p/1080p + FPS-Wahl)
|
||
- [ ] Qualität wählbar für den **Empfänger** (LiveKit-Simulcast-Layer auswählen)
|
||
- [ ] Sauberes Degradieren bei schwacher Bandbreite statt Ruckel-Chaos
|
||
|
||
## M5 – Chat-Funktionen
|
||
|
||
- [ ] Sprachnachrichten aufnehmen & abspielen (MSC3245-kompatibel, wie Element)
|
||
- [ ] **Bilder speichern → richtige Galerie:** über MediaStore/Downloads statt in den
|
||
unzugänglichen App-Ordner (Android Scoped Storage korrekt nutzen)
|
||
- [ ] Medien senden/empfangen generell prüfen (Fortschritt, Vorschau, Videos)
|
||
|
||
## M6 – Release & Verteilung
|
||
|
||
- [ ] **Google-Warnung beim Installieren untersuchen:** Play-Protect-Meldung seit der
|
||
Signatur-Einführung analysieren (Signing-Konfig prüfen; unbekannte Signatur + Sideload
|
||
löst das oft aus; ggf. Play-Protect-Appeal oder saubere v2/v3-Signierung)
|
||
- [ ] Release-Skript prüfen/aktualisieren (Windows + Android), Versionierung sauber
|
||
- [ ] In-App-Updater testen (existiert laut Git-Historie)
|
||
|
||
## M7 – Design & Feinschliff
|
||
|
||
- [ ] Rooms-Icon überarbeiten – passt stilistisch nicht zu den anderen Buttons
|
||
- [ ] Design-Konsistenz-Pass über alle Icons/Buttons
|
||
- [ ] Onboarding: erster Start erklärt Server-Wahl und Verifikation verständlich
|
||
- [ ] Themes/Darkmode-Feinschliff, Schriftgrößen
|
||
|
||
## Ideen-Parkplatz (unsortiert, erst nach M7 bewerten)
|
||
|
||
- Threads, Sticker, Standort teilen, mehrere Konten
|
||
- Watch-Together (z. B. Jellyfin gemeinsam schauen)
|
||
|
||
> Bernd: „Das ist nur der Anfang meiner Liste" – neue Punkte einfach hier in den
|
||
> passenden Meilenstein eintragen (oder Claude sagen, er soll sie einsortieren).
|