Files
pyramid/lib/features/voice_channel/voice_channel_service.dart
T
Bernd Steckmeister 3c7eb9ddca 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)
2026-07-06 12:42:59 +02:00

75 lines
2.6 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
});