|
1 | 1 | import 'package:collection/collection.dart'; |
| 2 | +import 'package:livekit_client/src/track/track.dart'; |
2 | 3 | import 'package:meta/meta.dart'; |
3 | 4 |
|
4 | 5 | import '../events.dart'; |
@@ -187,3 +188,38 @@ extension ParticipantExt on Participant { |
187 | 188 | .where((e) => e.kind == lk_models.TrackType.AUDIO) |
188 | 189 | .toList(); |
189 | 190 | } |
| 191 | + |
| 192 | +extension ParticipantTrackSourceExt on Participant { |
| 193 | + bool isCameraEnabled() { |
| 194 | + return !(getTrackPublicationBySource(TrackSource.camera)?.muted ?? true); |
| 195 | + } |
| 196 | + |
| 197 | + bool isMicrophoneEnabled() { |
| 198 | + return !(getTrackPublicationBySource(TrackSource.microphone)?.muted ?? |
| 199 | + true); |
| 200 | + } |
| 201 | + |
| 202 | + /// Find a track publication by its [TrackSource] |
| 203 | + TrackPublication? getTrackPublicationBySource(TrackSource source) { |
| 204 | + if (source == TrackSource.unknown) return null; |
| 205 | + // try to find by source |
| 206 | + final result = |
| 207 | + trackPublications.values.firstWhereOrNull((e) => e.source == source); |
| 208 | + if (result != null) return result; |
| 209 | + // try to find by compatibility |
| 210 | + return trackPublications.values |
| 211 | + .where((e) => e.source == TrackSource.unknown) |
| 212 | + .firstWhereOrNull((e) => |
| 213 | + (source == TrackSource.microphone && |
| 214 | + e.kind == lk_models.TrackType.AUDIO) || |
| 215 | + (source == TrackSource.camera && |
| 216 | + e.kind == lk_models.TrackType.VIDEO && |
| 217 | + e.name != Track.screenShareName) || |
| 218 | + (source == TrackSource.screenShareVideo && |
| 219 | + e.kind == lk_models.TrackType.VIDEO && |
| 220 | + e.name == Track.screenShareName) || |
| 221 | + (source == TrackSource.screenShareAudio && |
| 222 | + e.kind == lk_models.TrackType.AUDIO && |
| 223 | + e.name == Track.screenShareName)); |
| 224 | + } |
| 225 | +} |
0 commit comments