refactor: M2-Call-Pilot – Module call_signaling + voice_channel mit Fassaden (Entscheidung 2)
- CallSignalingService/callSignalingProvider und VoiceChannelService/ voiceChannelProvider als einzige oeffentliche Schnittstellen - voip_manager.dart / livekit_call_manager.dart in ihre Module verschoben, Logik unangetastet (nur Klassen-Koepfe, @override, Imports, Provider-Namen) - Alle Konsumenten entkoppelt; Kompositions-Punkt matrix_client.dart als dokumentierte Ausnahme. analyze sauber, 29 Tests gruen, Windows-Start ok. Call-Klick-/Geraetetest steht aus (PROGRESS.md)
This commit is contained in:
+55
@@ -13,6 +13,61 @@ Schritt (und beim Abbruch mitten im Schritt den Zwischenstand). Format:
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-06 – M2-Call-Pilot: Module call_signaling + voice_channel mit Fassaden umgesetzt (Entscheidung 2)
|
||||
|
||||
**Erledigt:** Das erste M2-Umbau-Modul nach `docs/M2_MODULE_SCHNITT.md`
|
||||
(Bernds Entscheidung 2: Call-Pilot zuerst, nicht settings_modal):
|
||||
|
||||
- **Zwei neue Module mit schmaler öffentlicher Schnittstelle:**
|
||||
`lib/features/call_signaling/` (`CallSignalingService` +
|
||||
`callSignalingProvider`; Implementierung `voip_manager.dart` hierher
|
||||
verschoben) und `lib/features/voice_channel/` (`VoiceChannelService` +
|
||||
`voiceChannelProvider`; Implementierung `livekit_call_manager.dart`
|
||||
hierher verschoben). Die zwei Call-Mechanismen bleiben wie im Doc
|
||||
begründet GETRENNT (Matrix-1:1-VoIP vs. LiveKit-SFU-Kanäle).
|
||||
- **Alle Konsumenten entkoppelt:** app_shell, Call-UI (`voice_channel.dart`,
|
||||
`mini_call_widget.dart`), Rooms-Panel (Join/Leave, Call-Dock),
|
||||
Chat-Header (Call-Start), Settings (`_VoiceSection` ist jetzt
|
||||
ConsumerStatefulWidget und nutzt die Provider statt der Singletons) –
|
||||
niemand importiert mehr die Implementierungsdateien, repo-weit verifiziert.
|
||||
Einzige dokumentierte Ausnahme: `matrix_client.dart` als Kompositions-
|
||||
Punkt, der `PyramidVoipManager(client)` konstruiert. Die alten Provider
|
||||
`callStateProvider`/`voipStateProvider` in app_state.dart sind ersatzlos
|
||||
durch die Modul-Provider ersetzt (reine Umbenennung + Typ = Interface).
|
||||
- **Bewusste Abweichungen vom Schnitt-Entwurf** (Verhaltensgleichheit vor
|
||||
Schönheit, heiliger Call-Pfad; im Doc-Status-Kopf dokumentiert):
|
||||
ChangeNotifier statt Streams, Methodennamen wie im Bestand
|
||||
(`startCall`/`hangUp` statt `join`/`leave`), `CallSession` und
|
||||
LiveKit-`Room` bleiben in den Schnittstellen sichtbar (UI rendert direkt
|
||||
Renderer/Tracks – für die WebRTC-Renderer sieht das Doc das selbst vor).
|
||||
Kein einziger Handler-/Logik-Block wurde verändert, nur Klassen-Köpfe
|
||||
(`extends` + `@override`), Imports, Provider-Namen und Typ-Annotationen.
|
||||
- **Geprüft:** `flutter analyze` sauber (nur bekannter onUpdate-Hinweis),
|
||||
alle 29 Tests grün, `flutter run -d windows`: App startet, Login/Sync/E2EE
|
||||
laufen, sauberer Quit. (Commit-Hash siehe git log dieses Eintrags.)
|
||||
|
||||
**UNGETESTET (interaktiv/Gerät – deshalb ROADMAP-Punkt „Call-Schicht
|
||||
entwirren" nur annotiert, nicht abgehakt):** echter Voice-Channel-Join per
|
||||
Klick auf Windows und echter 1:1-Call zwischen zwei Geräten. Der Umbau ist
|
||||
bewusst rein mechanisch (Fassade davor, Logik unangetastet), aber die
|
||||
CLAUDE.md-Regel „nach Refactoring Kernflows prüfen" ist für die Call-Flows
|
||||
erst nach einem Klick-/Gerätetest voll erfüllt – steht im PC_TESTPLAN
|
||||
(Abschnitt 8) bzw. braucht Bernd/Uta.
|
||||
|
||||
**Offen/Nächster Schritt:** Härtetest nach `docs/PC_TESTPLAN.md` (so weit
|
||||
ohne Klick-Interaktion möglich); die inneren M2-Aufräumarbeiten der
|
||||
Call-Schicht (UI-State aus den Managern, `call_ui`-Modul, storage-Fassade
|
||||
für die voice_*-Prefs) folgen als eigene Schritte.
|
||||
|
||||
**Stolperfallen:** (1) Bei part-Dateien (settings, rooms_panel, chat_view)
|
||||
hängen die Imports an der EINEN Owner-Datei – wer eine part-Datei umstellt,
|
||||
muss die Imports beim Owner ändern und findet Verwender nur per Repo-grep
|
||||
auf den Provider-Namen. (2) Ein `ChangeNotifierProvider<Interface>` braucht
|
||||
ein Interface, das ChangeNotifier ERWEITERT (abstract class X extends
|
||||
ChangeNotifier), sonst passt der Typparameter nicht.
|
||||
|
||||
---
|
||||
|
||||
## 2026-07-06 – SQLCipher-Migration UMGESETZT + auf Windows mit echter DB praxisgetestet (M1, Bernds Prio 1)
|
||||
|
||||
**Erledigt:** Der M1-Punkt „Sichere Speicherung von Access-Token & Krypto-DB"
|
||||
|
||||
Reference in New Issue
Block a user