formateLasteMessage static method

dynamic formateLasteMessage(
  1. Map<String, dynamic> message, {
  2. String groupID = "",
})

Implementation

static formateLasteMessage(Map<String, dynamic> message,
    {String groupID = ""}) async {
  final elementType = message['type'] != null
      ? MsgType.convertMsgType(message['type'])
      : MessageElemType.V2TIM_ELEM_TYPE_NONE;

  // 直接从消息中的Message中copy过来的,但部分字段有缺失
  final formatedMsg = <String, dynamic>{
    "msgID": message['ID'] ?? '',
    "timestamp": message['lastTime'],
    "progress": 100,
    "sender": message['fromAccount'].toString(),
    "nickName": message['nick'],
    "friendRemark": message['remark'],
    // "faceUrl": message.avatar ?? '',
    // "nameCard": message.nameCard,
    // "groupID": message.conversationType == "GROUP" ? message.to : null,
    // "userID": message.conversationType == "C2C" ? message.to : null,
    "status": getMessageStatus(message), // unSend sucess fail
    "elemType": elementType,
    "localCustomData": "",
    "localCustomInt": 0,
    "cloudCustomData": message['cloudCustomData'],
    "isSelf": true,
    "isRead": true, // message self read
    "isPeerRead": message["isPeerRead"],
    "isExcludedFromLastMessage": false,
    "needReadReceipt": message["needReadReceipt"],
    // "priority": convertPriorityFromWebToDart(message.priority),
    // "groupAtUserList": message.atUserList,
    // "random": message.random,
    "isExcludedFromUnreadCount": false,
    // "messageFromWeb": stringify(message)
  };

  final messagePayload = jsToMap(message["payload"] ?? "{}");

  // 文本消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_TEXT) {
    final textElem = V2TimTextElem(text: messagePayload['text']).toJson();
    formatedMsg['textElem'] = textElem;
  }

  // 自定义消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_CUSTOM) {
    final customElem = V2TimCustomElem(
            data: messagePayload['data'],
            desc: messagePayload['discription'],
            extension: messagePayload['extension'])
        .toJson();
    formatedMsg['customElem'] = customElem;
  }

  // 群系统通知消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS) {
    final groupTipsElement = await V2TIMMessage.convertGroupTipsMessage(
        message,
        groupID: groupID.replaceAll("c2c_", "").replaceAll("group_", ""));
    formatedMsg['groupTipsElem'] = groupTipsElement?.toJson();
  }

  // 图片消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE) {
    final imageInfoArray = messagePayload['imageInfoArray'] as List;
    final imagePath = jsToMap(imageInfoArray[0])['url'];
    final uuid = messagePayload['uuid'];
    final imageList = imageInfoArray.map((e) {
      final element = jsToMap(e);
      return V2TimImage(
          type: element['type'],
          height: element['height'],
          width: element['width'],
          size: element['size'],
          uuid: uuid,
          url: element['imageUrl']);
    }).toList();
    final imageElem = V2TimImageElem(path: imagePath, imageList: imageList);
    formatedMsg['imageElem'] = imageElem.toJson();
  }

  //视频消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_VIDEO) {
    final videoElem = V2TimVideoElem(
        videoPath: messagePayload['videoUrl'],
        duration: messagePayload['videoSecond'],
        UUID: messagePayload['videoUUID'],
        snapshotPath: messagePayload['thumbUrl'],
        snapshotUUID: messagePayload['thumbUUID'],
        snapshotSize: messagePayload['thumbSize'],
        snapshotWidth: messagePayload['thumbWidth'],
        snapshotHeight: messagePayload['thumbHeight'],
        videoUrl: messagePayload['videoUrl'],
        videoSize: messagePayload['videoSize']);
    formatedMsg['videoElem'] = videoElem.toJson();
  }

  // 文件消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_FILE) {
    final fileElem = V2TimFileElem(
            path: messagePayload['fileUrl'],
            fileName: messagePayload['fileName'],
            UUID: messagePayload['uuid'],
            fileSize: messagePayload['fileSize'])
        .toJson();
    formatedMsg['fileElem'] = fileElem;
  }

  // 地理位置消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_LOCATION) {
    final locationElem = V2TimLocationElem(
        desc: messagePayload['description'],
        longitude: messagePayload['longitude'],
        latitude: messagePayload['latitude']);
    formatedMsg['locationElem'] = locationElem.toJson();
  }

  List<String> formateList(List<dynamic> list) =>
      list.map((e) => e.toString()).toList();

  // 合并消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_MERGER) {
    final mergerElem = V2TimMergerElem(
        title: messagePayload['title'],
        abstractList: formateList(messagePayload['abstractList']),
        isLayersOverLimit: messagePayload['layersOverLimit'] ?? false);
    formatedMsg['mergerElem'] = mergerElem.toJson();
  }

  // 表情消息
  if (elementType == MessageElemType.V2TIM_ELEM_TYPE_FACE) {
    final faceMessage = V2TimFaceElem(
        index: messagePayload['index'], data: messagePayload['data']);
    formatedMsg['faceElem'] = faceMessage.toJson();
  }

  return formatedMsg;
}