V2TimMessage.fromJson constructor

V2TimMessage.fromJson(
  1. Map json
)

Implementation

V2TimMessage.fromJson(Map json) {
  json = Utils.formatJson(json);
  _messageConvType = json['message_conv_type'];
  _messageConvID = json['message_conv_id'];
  if (_messageConvType == ConversationType.V2TIM_GROUP) {
    groupID = _messageConvID;
  } else {
    userID = _messageConvID;
  }
  sender = json['message_sender'];
  _senderTinyID = json['message_sender_tiny_id'];
  _receiverTinyID = json['message_receiver_tiny_id'];
  priority = json['message_priority'];
  _clientTime = json['message_client_time'];
  _serverTime = json['message_server_time'];
  if (_serverTime != null && _serverTime! > 0) {
    timestamp = _serverTime;
  } else {
    timestamp = _clientTime ?? 0;
  }
  isSelf = json['message_is_from_self'];
  _platform = json['message_platform'];
  isRead = json['message_is_read'];
  isOnlineOnly = json['message_is_online_msg'];
  isPeerRead = json['message_is_peer_read'];
  _receiptPeerRead = json['message_receipt_peer_read'];
  needReadReceipt = json['message_need_read_receipt'];
  isBroadcastMessage = json['message_is_broadcast_message'];
  _messageHasSentReceipt = json['message_has_sent_receipt'];
  _messageGroupReceiptReadCount = json['message_group_receipt_read_count'];
  _messageGroupReceiptUnreadCount = json['message_group_receipt_unread_count'];
  isSupportMessageExtension = json["message_support_message_extension"];
  _messageVersion = json['message_version'];
  status = json['message_status'];
  msgID = json['message_msg_id'];
  seq = json['message_seq']?.toString();
  random = json['message_rand'];
  localCustomInt = json['message_custom_int'];
  localCustomData = json['message_custom_str'] ?? "";
  cloudCustomData = json['message_cloud_custom_str'] ?? "";
  isExcludedFromUnreadCount = json['message_is_excluded_from_unread_count'];
  senderProfile = json['message_sender_profile'] != null ? V2TimUserInfo.fromJson(json['message_sender_profile']) : null;
  nickName = senderProfile?.nickName;
  faceUrl = senderProfile?.faceUrl;
  if (senderProfile != null) {
    friendRemark = json['message_sender_profile']['user_profile_friend_remark'];
  }
  isExcludedFromLastMessage = json['message_excluded_from_last_message'];
  isExcludedFromContentModeration = json['message_excluded_from_content_moderation'];
  _customModerationConfigurationID = json['message_custom_moderation_configuration_id'];
  hasRiskContent = _riskTypeIdentified > 1 ? true : false;
  _riskTypeIdentified = json['message_risk_type_identified'];
  isDisableCloudMessagePreHook = json['message_disable_cloud_message_pre_hook'];
  isDisableCloudMessagePostHook = json['message_disable_cloud_message_post_hook'];
  revokeReason = json['message_revoke_reason'];
  _revokerUserID = json['message_revoker_user_id'];
  _revokerNickname = json['message_revoker_nick_name'];
  _revokerFaceUrl = json['message_revoker_face_url'];
  if (_revokerUserID != null) {
    _revokerInfo = V2TimUserFullInfo();
    _revokerInfo!.userID = _revokerUserID;
    _revokerInfo!.nickName = _revokerNickname;
    _revokerInfo!.faceUrl = _revokerFaceUrl;
  }

  _pinnerUserID = json['message_pinner_user_id'];
  _pinnerNickname = json['message_pinner_nick_name'];
  _pinnerRemark = json['message_pinner_friend_remark'];
  _pinnerNameCard = json['message_pinner_name_card'];
  _pinnerFaceUrl = json['message_pinner_face_url'];
  targetGroupMemberList = json['message_target_group_member_array']?.cast<String>() ?? [];
  groupAtUserList = json['message_group_at_user_array']?.cast<String>() ?? [];
  senderGroupMemberInfo = V2TimGroupMemberInfo.fromJson(json['message_sender_group_member_info'] ?? {});
  nameCard = senderGroupMemberInfo?.nameCard;
  offlinePushInfo = json['message_offline_push_config'] != null ? OfflinePushInfo.fromJson(json['message_offline_push_config']) : null;

  var jsonElemList = json["message_elem_array"] ?? List.empty(growable: true);
  for (int elemIndex = 0; elemIndex < jsonElemList.length; ++elemIndex) {
    var jsonElem = jsonElemList[elemIndex] as Map<String, dynamic>;

    // elemType 和 elem 取第一个值作为消息的元素内容
    int cElemType = jsonElem['elem_type'] ?? -1;
    if (cElemType == CElemType.ElemText) {
      var element = V2TimTextElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_TEXT;
        textElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemCustom) {
      var element = V2TimCustomElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_CUSTOM;
        customElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemImage) {
      var element = V2TimImageElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_IMAGE;
        imageElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemSound) {
      var element = V2TimSoundElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_SOUND;
        soundElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemVideo)  {
      var element = V2TimVideoElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_VIDEO;
        videoElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemFile) {
      var element = V2TimFileElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_FILE;
        fileElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemLocation)  {
      var element = V2TimLocationElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_LOCATION;
        locationElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemFace)  {
      var element = V2TimFaceElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_FACE;
        faceElem = element;
      }

      elemList.add(element);
    } else if (cElemType == CElemType.ElemGroupTips) {
      var element = V2TimGroupTipsElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS;
        groupTipsElem = element;
      }
      elemList.add(element);
    } else if (cElemType == CElemType.ElemGroupReport) {
      var element = V2TimGroupReportElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_GROUP_REPORT;
        groupReportElem = element;
      }
      elemList.add(element);
    } else if (cElemType == CElemType.ElemMerge)  {
      var element = V2TimMergerElem.fromJson(jsonElem);
      if (elemIndex == 0) {
        elemType = MessageElemType.V2TIM_ELEM_TYPE_MERGER;
        mergerElem = element;
      }
      elemList.add(element);
    }
  }

  if (jsonElemList.length == 0)   {
    elemType = json['elem_type'] ?? -1;
  }

  if (elemList.length > 1) {
    for (int i = 0; i < elemList.length - 1; ++i) {
      elemList[i].nextElem = elemList[i + 1].toJson();
    }
  }

  isForwardMessage = json['message_is_forward_message'];

  progress = json['progress'];
  id = json['id'];
  if (msgID == null && id != null) {
    msgID = id;
  }
}