/
call_connect_options.dart
120 lines (92 loc) · 2.65 KB
/
call_connect_options.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import 'package:equatable/equatable.dart';
import '../webrtc/media/media_constraints.dart';
import '../webrtc/rtc_track/rtc_local_track.dart';
class CallConnectOptions with EquatableMixin {
const CallConnectOptions({
this.camera = TrackDisabled._instance,
this.microphone = TrackDisabled._instance,
this.screenShare = TrackDisabled._instance,
});
final TrackOption camera;
final TrackOption microphone;
final TrackOption screenShare;
CallConnectOptions copyWith({
TrackOption? camera,
TrackOption? microphone,
TrackOption? screenShare,
}) {
return CallConnectOptions(
camera: camera ?? this.camera,
microphone: microphone ?? this.microphone,
screenShare: screenShare ?? this.screenShare,
);
}
@override
List<Object> get props => [camera, microphone, screenShare];
@override
String toString() {
return 'CallConnectOptions{'
'camera: $camera,'
' microphone: $microphone,'
' screenShare: $screenShare, '
'}';
}
}
abstract class TrackOption with EquatableMixin {
const TrackOption();
factory TrackOption.fromSetting({required bool enabled}) =>
enabled ? TrackOption.enabled() : TrackOption.disabled();
factory TrackOption.enabled() {
return TrackEnabled._instance;
}
factory TrackOption.disabled() {
return TrackDisabled._instance;
}
factory TrackOption.provided(RtcLocalTrack track) {
return TrackProvided._(track: track);
}
@override
bool? get stringify => true;
@override
List<Object?> get props => [];
}
class TrackDisabled extends TrackOption {
const TrackDisabled._();
static const TrackDisabled _instance = TrackDisabled._();
@override
String toString() => 'disabled';
}
class TrackEnabled extends TrackOption {
const TrackEnabled._();
static const TrackEnabled _instance = TrackEnabled._();
@override
String toString() => 'enabled';
}
class TrackProvided<T extends MediaConstraints> extends TrackOption {
const TrackProvided._({required this.track});
final RtcLocalTrack<T> track;
@override
List<Object?> get props => [track.trackType];
@override
String toString() => 'provided(${track.trackId})';
}
extension TrackOptionX on TrackOption {
TrackOption toggle() {
if (isEnabled) {
return TrackOption.disabled();
} else if (isDisabled) {
return TrackOption.enabled();
}
return this;
}
bool get isEnabled => this is TrackEnabled;
bool get isDisabled => this is TrackDisabled;
bool get isProvided => this is TrackProvided;
RtcLocalTrack? get trackOrNull {
final self = this;
if (self is TrackProvided) {
return self.track;
}
return null;
}
}