Skip to content

Commit f1a22e7

Browse files
authored
timeout reason added (#713)
1 parent f69d938 commit f1a22e7

File tree

9 files changed

+44
-13
lines changed

9 files changed

+44
-13
lines changed

docusaurus/docs/Flutter/05-advanced/02-ringing.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ void _onCallDecline(ActionCallDecline event) async {
138138
final callToReject = call.getDataOrNull();
139139
if (callToReject == null) return;
140140
141-
final result = await callToReject.reject();
141+
final result = await callToReject.reject(reason: CallRejectReason.decline());
142142
if (result is Failure) {
143143
debugPrint('Error rejecting call: ${result.error}');
144144
}

dogfooding/lib/app/app_content.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,9 @@ class _StreamDogFoodingAppContentState
254254
final callToReject = call.getDataOrNull();
255255
if (callToReject == null) return;
256256

257-
final result = await callToReject.reject();
257+
final result = await callToReject.reject(
258+
reason: CallRejectReason.decline(),
259+
);
258260
if (result is Failure) {
259261
debugPrint('Error rejecting call: ${result.error}');
260262
}

dogfooding/lib/screens/call_screen.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ class _CallScreenState extends State<CallScreen> {
135135
call: widget.call,
136136
callConnectOptions: widget.connectOptions,
137137
onCancelCallTap: () async {
138-
await widget.call.reject();
138+
await widget.call.reject(reason: CallRejectReason.cancel());
139139
await widget.call.leave();
140140
},
141141
callContentBuilder: (

packages/stream_video/lib/src/call/call.dart

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -414,14 +414,14 @@ class Call {
414414

415415
final outgoingCall = _getOutgoingCall();
416416
if (outgoingCall?.callCid != callCid) {
417-
await outgoingCall?.reject(reason: 'cancel');
417+
await outgoingCall?.reject(reason: CallRejectReason.cancel());
418418
await outgoingCall?.leave();
419419
await _setOutgoingCall(null);
420420
}
421421

422422
final activeCall = _getActiveCall();
423423
if (activeCall?.callCid != callCid) {
424-
await activeCall?.reject(reason: 'cancel');
424+
await activeCall?.reject(reason: CallRejectReason.cancel());
425425
await activeCall?.leave();
426426
await _setActiveCall(null);
427427
}
@@ -433,7 +433,7 @@ class Call {
433433
return result;
434434
}
435435

436-
Future<Result<None>> reject({String? reason}) async {
436+
Future<Result<None>> reject({CallRejectReason? reason}) async {
437437
final state = this.state.value;
438438
_logger.i(() => '[reject] ${_status.value}; state: $state');
439439
final status = state.status;
@@ -442,8 +442,10 @@ class Call {
442442
_logger.w(() => '[rejectCall] rejected (invalid status): $status');
443443
return Result.error('invalid status: $status');
444444
}
445-
final result =
446-
await _coordinatorClient.rejectCall(cid: state.callCid, reason: reason);
445+
final result = await _coordinatorClient.rejectCall(
446+
cid: state.callCid,
447+
reason: reason?.value,
448+
);
447449
if (result is Success<None>) {
448450
_stateManager.lifecycleCallRejected();
449451
}
@@ -582,7 +584,7 @@ class Call {
582584
if (result.isFailure) {
583585
_logger.e(() => '[join] waiting failed: $result');
584586

585-
await reject();
587+
await reject(reason: CallRejectReason.timeout());
586588
_stateManager.lifecycleCallTimeout();
587589

588590
return result;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import 'package:equatable/equatable.dart';
2+
3+
/// Reason for rejecting a call.
4+
///
5+
/// busy - when the callee is busy and cannot accept the call
6+
/// decline - when the callee intentionally declines the call
7+
/// cancel - when the caller cancels the call
8+
/// timeout - when the call times out
9+
class CallRejectReason with EquatableMixin {
10+
const CallRejectReason._(this.value);
11+
12+
factory CallRejectReason.decline() => const CallRejectReason._('decline');
13+
factory CallRejectReason.cancel() => const CallRejectReason._('cancel');
14+
factory CallRejectReason.busy() => const CallRejectReason._('busy');
15+
factory CallRejectReason.timeout() => const CallRejectReason._('timeout');
16+
factory CallRejectReason.custom(String customType) =>
17+
CallRejectReason._(customType);
18+
19+
final String value;
20+
21+
@override
22+
String toString() => value;
23+
24+
@override
25+
List<Object?> get props => [value];
26+
}

packages/stream_video/lib/stream_video.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export 'open_api/video/coordinator/api.dart';
44
export 'src/call/call.dart';
55
export 'src/call/call_connect_options.dart';
66
export 'src/call/call_events.dart';
7+
export 'src/call/call_reject_reason.dart';
78
export 'src/call/call_ringing_state.dart';
89
export 'src/call/call_type.dart';
910
export 'src/call_state.dart';

packages/stream_video_flutter/example/lib/screen/home_screen.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,11 @@ class _HomeScreenState extends State<HomeScreen> {
9696
call: call,
9797
callConnectOptions: options,
9898
onDeclineCallTap: () async {
99-
await call.reject(reason: 'decline');
99+
await call.reject(reason: CallRejectReason.decline());
100100
await call.leave();
101101
},
102102
onCancelCallTap: () async {
103-
await call.reject(reason: 'cancel');
103+
await call.reject(reason: CallRejectReason.cancel());
104104
await call.leave();
105105
},
106106
),

packages/stream_video_flutter/lib/src/call_screen/incoming_call/incoming_call_content.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ class _StreamIncomingCallContentState extends State<StreamIncomingCallContent> {
151151
if (widget.onDeclineCallTap != null) {
152152
widget.onDeclineCallTap!();
153153
} else {
154-
await widget.call.reject(reason: 'decline');
154+
await widget.call.reject(reason: CallRejectReason.decline());
155155
await widget.call.leave();
156156
}
157157
}

packages/stream_video_flutter/lib/src/call_screen/outgoing_call/outgoing_call_content.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class _StreamOutgoingCallContentState extends State<StreamOutgoingCallContent> {
166166
if (widget.onCancelCallTap != null) {
167167
widget.onCancelCallTap!();
168168
} else {
169-
await widget.call.reject(reason: 'cancel');
169+
await widget.call.reject(reason: CallRejectReason.cancel());
170170
await widget.call.leave();
171171
}
172172
}

0 commit comments

Comments
 (0)