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:
@@ -0,0 +1,74 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:livekit_client/livekit_client.dart' as lk;
|
||||
import 'package:matrix/matrix.dart' hide Room;
|
||||
import 'package:pyramid/features/voice_channel/livekit_call_manager.dart';
|
||||
|
||||
/// Öffentliche Schnittstelle des Moduls `voice_channel` – LiveKit-SFU-basierte,
|
||||
/// dauerhafte Voice-Channels (Discord-artig: Presence über Matrix-State-Events,
|
||||
/// Screensharing, Mehrpersonen). Schnitt nach `docs/M2_MODULE_SCHNITT.md`;
|
||||
/// bewusst GETRENNT vom 1:1-Modul `call_signaling`, siehe dort.
|
||||
///
|
||||
/// Andere Module konsumieren ausschließlich diese Schnittstelle über
|
||||
/// [voiceChannelProvider] – nie `livekit_call_manager.dart` direkt.
|
||||
///
|
||||
/// Bewusste Abweichungen vom Entwurf im Doc (Verhaltensgleichheit vor
|
||||
/// Schönheit): ChangeNotifier statt `stateStream`, Methodennamen wie im
|
||||
/// Bestand (`startCall`/`hangUp` statt `join`/`leave`), und [room] bleibt
|
||||
/// als LiveKit-Typ sichtbar, weil die Teilnehmer-Kacheln der UI direkt
|
||||
/// LiveKit-Tracks rendern (analog zu den WebRTC-Renderern im Signaling).
|
||||
abstract class VoiceChannelService extends ChangeNotifier {
|
||||
bool get isActive;
|
||||
bool get isConnecting;
|
||||
String? get error;
|
||||
bool get isMuted;
|
||||
bool get isCameraOff;
|
||||
bool get isScreenSharing;
|
||||
bool get isDeafened;
|
||||
bool get isVoiceChannel;
|
||||
|
||||
/// Der verbundene LiveKit-Raum (null = nicht verbunden).
|
||||
lk.Room? get room;
|
||||
|
||||
/// Matrix-Raum-ID des aktiven Voice-Channels.
|
||||
String? get currentRoomId;
|
||||
String get displayName;
|
||||
|
||||
/// Sende-Qualität ('sd' | 'hd' | 'fhd' | '4k').
|
||||
String get currentQualityKey;
|
||||
|
||||
/// Empfangs-Qualität ('auto' | 'low' | 'medium' | 'high').
|
||||
String get subscribeQualityKey;
|
||||
|
||||
Future<void> startCall({
|
||||
required String roomName,
|
||||
required String roomDisplayName,
|
||||
required String identity,
|
||||
bool audioOnly,
|
||||
bool voiceChannel,
|
||||
Client? matrixClient,
|
||||
String? matrixRoomId,
|
||||
});
|
||||
Future<void> hangUp();
|
||||
|
||||
Future<void> toggleMute();
|
||||
Future<void> toggleDeafen();
|
||||
Future<void> toggleCamera();
|
||||
Future<void> toggleScreenShare();
|
||||
Future<void> startScreenShare(String sourceId);
|
||||
Future<void> stopScreenShare();
|
||||
|
||||
Future<void> changeQuality(String qualityKey);
|
||||
Future<void> setSubscribeQuality(String key);
|
||||
|
||||
/// Live-Anwendung des Lautstärke-Sliders auf alle Remote-Audio-Tracks.
|
||||
Future<void> setOutputVolume(double v);
|
||||
Future<void> changeAudioInput(String deviceId);
|
||||
void setRemoteVolume(double volume);
|
||||
}
|
||||
|
||||
/// Einziger Zugriffsweg der UI auf das Voice-Channel-Modul.
|
||||
final voiceChannelProvider =
|
||||
ChangeNotifierProvider<VoiceChannelService>((ref) {
|
||||
return LiveKitCallManager.instance;
|
||||
});
|
||||
Reference in New Issue
Block a user