0c7d359076
Gleiche Technik wie bei den vorigen drei Umbauten: reine Verschiebung per Dart part/part-of, keine Logikänderung. space_admin_dialog.dart schrumpft von 2278 auf 19 Zeilen (nur noch Bibliothekskopf). Verifiziert per automatisiertem Blockvergleich gegen das Original und flutter analyze. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
9.0 KiB
9.0 KiB
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
- Vollbackup vor dem Refactoring (2026-07-03 →
MatrixPi\backups\pyramid-kopie_backup_2026-07-03.tar.gz) - Die ~140 uncommitteten Dateien sichten, in thematische Commits aufteilen, zu Gitea pushen
(Sicherungs-Commit
25ed765+ Folge-Commits bis 74d38fd; Arbeitsbaum ist jetzt sauber) flutter analyzekomplett sauber bekommen und sauber halten (nur noch 1 bewusst zurückgestellter Hinweis, siehe PROGRESS.md 2026-07-03)lib/features/call/vs.lib/features/calls/(leer?) klären – Leiche entfernen (geprüft:calls/existiert nicht mehr, nurcall/mit den echten Dateien)- README.md durch echte Projektbeschreibung ersetzt (
74d38fd)
M1 – Sicherheit: Nie wieder aussperren / kein Datenverlust
- 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. - REGRESSION: Push-Benachrichtigungen werden nicht mehr entschlüsselt –
UNGETESTET (Pi), sehr wahrscheinlich DIESELBE Ursache wie der
Uta-Random-Logout-Bug (bereits mit
9dc83f7mitgefixt), 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) – danndocs/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_libssteht zwar inpubspec.yaml, wird aber nirgends benutzt –matrix_client.dartundbackground_push.dartöffnen diepyramid.sqlite(Access-Token, gepickelter Olm-Account, Nachrichten) über den normalensqflite/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. - Key-Backup einrichten-Flow: bereits vorhanden (
bootstrap_dialog.dart, wird automatisch getriggert wenn Cross-Signing fehlt,app_shell.dart) - Key-Backup wiederherstellen-Flow: bereits vorhanden (
bootstrap_dialog.dart,BootstrapState.askUnlockSsssfragt nach Recovery-Key auf neuem Gerät) - Logout-Schutz: Warnung mit Klartext-Folgen, wenn Key-Backup fehlt (
b5762ea) - Geräte-/Sessionverwaltung in den Einstellungen: bereits vorhanden
(
_SessionsSectioninsettings_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.
- Ist-Analyse geschrieben (PROGRESS.md 2026-07-03): Gott-Datei
settings_modal.dart(5541 Zeilen/50+ Klassen), Call-Schicht ohne gemeinsame Fassade (4 Module importierenvoice_channel.dartdirekt),app_state.dartals Kopplungspunkt aller Features, keine gemeinsame Storage-Schnittstelle (12 direkteSharedPreferences-Zugriffe), toter Code (message_bubble.dart) + Duplikate (_formatTime/_formatDate3-fach). 8 Modul-Kandidaten dokumentiert. - 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ßerdemsettings(aufgesplittet),verification(neu, aus Settings herausgelöst),storage(Ausbausettings_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.darttot entfernt, doppelte_formatTimeinmessage_group.dartzusammengeführt; Gott-Dateiwidgets/settings_modal.dart(5541 Zeilen) in 12part-Dateien unterwidgets/settings/aufgeteilt, siehe PROGRESS.md 2026-07-03 „Settings-Datei aufgeteilt";features/chat/message_group.dart(2775 Zeilen) ebenso in 7part-Dateien unterfeatures/chat/message/aufgeteilt (PROGRESS.md 2026-07-03 „message_group.dart aufgeteilt");features/rooms/rooms_panel.dart(2555 Zeilen) ebenso in 8part-Dateien unterfeatures/rooms/panel/aufgeteilt (PROGRESS.md 2026-07-03 „rooms_panel.dart aufgeteilt");features/spaces/space_admin_dialog.dart(2278 Zeilen) ebenso in 6part-Dateien unterfeatures/spaces/admin/aufgeteilt (PROGRESS.md 2026-07-03 „space_admin_dialog.dart aufgeteilt") – restliche Gott-Dateichat_view.dartaus der Ist-Analyse noch offen) - 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).