mergeMessage static method
合并消息,返回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);
}