forked from eatvio/eatvio_app
feat(video_calls): ios repeated call fix
This commit is contained in:
@@ -363,7 +363,7 @@ class VideoCallCallKitCoordinator {
|
||||
);
|
||||
return;
|
||||
}
|
||||
await _handleDecline(id);
|
||||
await _handleDecline(id, eventExtra: _callKitEventParams(event)?.extra);
|
||||
}
|
||||
|
||||
Future<void> _handleEndedEvent(CallEvent event) async {
|
||||
@@ -855,7 +855,10 @@ class VideoCallCallKitCoordinator {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _handleDecline(String callKitId) async {
|
||||
Future<void> _handleDecline(
|
||||
String callKitId, {
|
||||
Map<String, dynamic>? eventExtra,
|
||||
}) async {
|
||||
if (_suppressedEndCallKitIds.contains(callKitId)) {
|
||||
log(
|
||||
'VideoCallCallKitCoordinator: ignore spurious end/decline during accept, callKitId=$callKitId',
|
||||
@@ -865,12 +868,15 @@ class VideoCallCallKitCoordinator {
|
||||
}
|
||||
|
||||
final params = _paramsForCallId(callKitId);
|
||||
final extra = params?.extra ?? <String, dynamic>{};
|
||||
final extra = params?.extra ?? eventExtra ?? <String, dynamic>{};
|
||||
final conversationUuid = _parseConversationUuid(
|
||||
extra,
|
||||
handle: params?.handle ?? callKitId,
|
||||
);
|
||||
final endedPushDismissal = callKitExtraMarksEndedPush(extra);
|
||||
final endedPushDismissal = callKitDeclineIsEndedPush(
|
||||
cachedExtra: params?.extra,
|
||||
eventExtra: eventExtra,
|
||||
);
|
||||
|
||||
_suppressedEndCallKitIds.add(callKitId);
|
||||
try {
|
||||
|
||||
@@ -71,6 +71,17 @@ bool callKitExtraMarksEndedPush(Map<String, dynamic>? extra) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// Either the cached incoming payload or the decline event itself can carry
|
||||
/// the marker. The decline often arrives with the push payload, while the
|
||||
/// cache still holds the original ringing call.
|
||||
bool callKitDeclineIsEndedPush({
|
||||
Map<String, dynamic>? cachedExtra,
|
||||
Map<String, dynamic>? eventExtra,
|
||||
}) {
|
||||
return callKitExtraMarksEndedPush(cachedExtra) ||
|
||||
callKitExtraMarksEndedPush(eventExtra);
|
||||
}
|
||||
|
||||
bool shouldForceEndCallAfterRoomDisconnect({
|
||||
required bool callStageEntered,
|
||||
required bool sessionConnected,
|
||||
|
||||
Reference in New Issue
Block a user