diff --git a/lib/controller/message/call_controller.dart b/lib/controller/message/call_controller.dart index 039a149..d5dcdd8 100644 --- a/lib/controller/message/call_controller.dart +++ b/lib/controller/message/call_controller.dart @@ -174,7 +174,7 @@ class CallController extends GetxController { ChatController? chatController, }) async { if (currentCall.value != null) { - SmartDialog.showToast('已有通话正在进行中'); + SmartDialog.showToast('当前正在通话中'); return false; } diff --git a/lib/im/im_manager.dart b/lib/im/im_manager.dart index 352178e..f79760b 100644 --- a/lib/im/im_manager.dart +++ b/lib/im/im_manager.dart @@ -1859,6 +1859,48 @@ class IMManager { // 只处理视频通话且状态为 missed 或 calling 的消息(新邀请) if ((callType == 'video' || callType == 'voice') && (callStatus == 'waitCalling' || callStatus == 'calling')) { + // 检查当前是否正在通话中,如果是则自动拒绝新通话 + final callController = CallController.instance; + if (callController.currentCall.value != null) { + // 当前正在通话中,自动拒绝新通话 + if (Get.isLogEnable) { + Get.log('📞 [IMManager] 当前正在通话中,自动拒绝新通话邀请: $fromId'); + } else { + print('📞 [IMManager] 当前正在通话中,自动拒绝新通话邀请: $fromId'); + } + + // 自动拒绝新通话 + Future.microtask(() async { + try { + ChatController? chatController; + try { + final tag = 'chat_$fromId'; + if (Get.isRegistered(tag: tag)) { + chatController = Get.find(tag: tag); + } + } catch (e) { + // 忽略错误,chatController 可以为 null + } + + await callController.rejectCall( + message: message, + chatController: chatController, + ); + + if (Get.isLogEnable) { + Get.log('✅ [IMManager] 已自动拒绝新通话邀请'); + } + } catch (e) { + if (Get.isLogEnable) { + Get.log('⚠️ [IMManager] 自动拒绝新通话失败: $e'); + } + } + }); + + // 不显示通话邀请弹框,直接返回 + return; + } + RTMManager.instance.subscribe(channelId ?? ''); // 获取用户信息 Map? attributes; @@ -1903,7 +1945,6 @@ class IMManager { final finalAvatarUrl = avatarUrl ?? ''; // 接收方收到视频通话时,开始播放来电铃声 - final callController = CallController.instance; callController.startCallAudio(); // 显示视频通话邀请弹框 diff --git a/lib/widget/message/call_item.dart b/lib/widget/message/call_item.dart index 92fa6b9..9e0add5 100644 --- a/lib/widget/message/call_item.dart +++ b/lib/widget/message/call_item.dart @@ -149,8 +149,6 @@ class CallItem extends StatelessWidget { if (callStatus == CallStatus.calling && duration != null) { // 通话中,显示时长 return _formatDuration(duration); - } else if (callStatus == CallStatus.missed) { - return '未接听'; } else if (callStatus == CallStatus.cancelled) { return '已取消'; } else if (callStatus == CallStatus.rejected) { @@ -158,7 +156,7 @@ class CallItem extends StatelessWidget { } else if(callStatus == CallStatus.terminated){ return '已结束'; }else { - return callType == CallType.video ? '视频通话' : '语音通话'; + return callType == CallType.video ? '我刚刚邀请你视频通话' : '我刚刚邀请你语音通话'; } }