mergeMessage static method

Future<NIMResult<Map<String, dynamic>>> mergeMessage(
  1. List<NIMMessage> messageList
)

合并消息,返回Map

Implementation

static Future<NIMResult<Map<String, dynamic>>> mergeMessage(
  List<NIMMessage> messageList,
) async {
  if (messageList.isEmpty) {
    return NIMResult.failure(message: 'merge message list is empty');
  }
  final messages = messageList;

  if (messages.isEmpty) {
    return NIMResult.failure(message: 'filtrated messages is empty');
  }
  final messageUpload = await ChatMessageRepo.uploadMergedMessageFile(
    messages,
  );
  if (messageUpload.isSuccess && messageUpload.data != null) {
    final Map<String, dynamic> result = {};
    result[CustomMessageKey.type] = CustomMessageType.customMergeMessageType;
    String url = messageUpload.data!.url;
    String md5 = messageUpload.data!.md5;
    var depth = 0;
    String sessionId;
    String sessionName;
    sessionId =
        (await NimCore.instance.conversationIdUtil.conversationTargetId(
      messages.first.conversationId!,
    ))
            .data!;
    if (messages.first.conversationType == NIMConversationType.p2p) {
      sessionName = await sessionId.getUserName(needAlias: false);
    } else if (messages.first.conversationType == NIMConversationType.team) {
      sessionName = NIMChatCache.instance.teamInfo?.name ?? sessionId;
    } else {
      sessionName = sessionId;
    }
    final List<MergeMessageAbstract> abstracts = List.empty(growable: true);
    for (int i = 0; i < messages.length; i++) {
      var message = messages[i];
      if (i < 3) {
        String userAccId = message.senderId!;
        String senderNick = (await getIt<ContactProvider>().getContact(
              userAccId,
              needFriend: false,
            ))
                ?.getName(needAlias: false) ??
            userAccId;
        String content = ChatMessageHelper.getMessageBrief(message);
        abstracts.add(
          MergeMessageAbstract(
            senderNick: senderNick,
            content: content,
            userAccId: userAccId,
          ),
        );
      }
      var mergeMsg = parseMergeMessage(message);
      if (mergeMsg != null &&
          mergeMsg.depth != null &&
          mergeMsg.depth! > depth) {
        depth = mergeMsg.depth!;
      }
    }
    depth++;
    result[CustomMessageKey.data] = MergedMessage(
      sessionId: sessionId,
      sessionName: sessionName,
      url: url,
      md5: md5,
      depth: depth,
      abstracts: abstracts,
    ).toMap();
    return NIMResult.success(data: result);
  }
  return NIMResult.failure(message: messageUpload.errorDetails);
}