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 = messages.first.sessionId!;
    if (messages.first.sessionType == NIMSessionType.p2p) {
      sessionName = await sessionId.getUserName(needAlias: false);
    } else if (messages.first.sessionType == NIMSessionType.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.fromAccount!;
        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);
}