Browse Source

fix(call): 修复通话冲突处理逻辑

- 修正了通话中提示文案,从"已有通话正在进行中"改为"当前正在通话中"
- 移除了通话记录中未接听状态的显示
- 修改了通话邀请的默认显示文案,明确标识为"我刚刚邀请你视频通话"或"我刚刚邀请你语音通话"
- 在IM管理器中添加了通话冲突检测机制,当有通话正在进行时自动拒绝新通话邀请
- 添加了自动拒绝新通话的日志记录功能
- 优化了通话邀请弹框的触发逻辑,避免重复弹出
master
Jolie 2 months ago
parent
commit
bd63283ab9
3 changed files with 44 additions and 5 deletions
  1. 2
      lib/controller/message/call_controller.dart
  2. 43
      lib/im/im_manager.dart
  3. 4
      lib/widget/message/call_item.dart

2
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;
}

43
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<ChatController>(tag: tag)) {
chatController = Get.find<ChatController>(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<String, dynamic>? attributes;
@ -1903,7 +1945,6 @@ class IMManager {
final finalAvatarUrl = avatarUrl ?? '';
//
final callController = CallController.instance;
callController.startCallAudio();
//

4
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 ? '我刚刚邀请你视频通话' : '我刚刚邀请你语音通话';
}
}

Loading…
Cancel
Save