getMessagePayload static method

MessagePayload? getMessagePayload(
  1. V2TimMessage imMessage
)

Implementation

static MessagePayload? getMessagePayload(V2TimMessage imMessage) {
  switch (imMessage.elemType) {
    case MessageElemType.V2TIM_ELEM_TYPE_TEXT:
      String? translateLanguage;
      Map<String, String>? translatedText;
      final localCustomData = imMessage.localCustomData;
      if (localCustomData != null && localCustomData.isNotEmpty) {
        final json = jsonData2Dictionary(localCustomData);
        if (json != null) {
          final translatedTextMap = json['text_translation'] as Map<String, dynamic>?;
          if (translatedTextMap != null && translatedTextMap.isNotEmpty) {
            translatedText = translatedTextMap.map((key, value) => MapEntry(key, value.toString()));
          }
          translateLanguage = json['text_translation_language'] as String?;
        }
      }
      return TextMessagePayload(
        text: imMessage.textElem?.text ?? '',
        translateLanguage: translateLanguage,
        translatedText: translatedText,
      );

    case MessageElemType.V2TIM_ELEM_TYPE_IMAGE:
      if (imMessage.imageElem != null) {
        final payload = ImageMessagePayload();

        if (imMessage.imageElem?.imageList != null) {
          for (var image in imMessage.imageElem!.imageList!) {
            if (image?.type == V2TIM_IMAGE_TYPE.V2TIM_IMAGE_TYPE_ORIGIN) {
              payload.originalImageSize = image?.size ?? 0;
              payload.originalImageWidth = image?.width ?? 0;
              payload.originalImageHeight = image?.height ?? 0;
              payload.originalImageURL = image?.url;
              final result =
                  getActualMediaPath(MessageType.image, imMessage.imageElem!.path, image?.uuid ?? "", "origin_");
              if (result[localExistKey]) {
                payload.originalImagePath = result[filePathKey];
              }
            } else if (image?.type == V2TIM_IMAGE_TYPE.V2TIM_IMAGE_TYPE_THUMB) {
              payload.thumbImageURL = image?.url;
              final result =
                  getActualMediaPath(MessageType.image, image?.localUrl ?? "", image?.uuid ?? "", "thumb_");
              if (result[localExistKey]) {
                payload.thumbImagePath = result[filePathKey];
              }
            } else if (image?.type == V2TIM_IMAGE_TYPE.V2TIM_IMAGE_TYPE_LARGE) {
              payload.largeImageURL = image?.url;
              final result =
                  getActualMediaPath(MessageType.image, image?.localUrl ?? "", image?.uuid ?? '', "large_");
              if (result[localExistKey]) {
                payload.largeImagePath = result[filePathKey];
              }
            }
          }
        }
        return payload;
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_SOUND:
      if (imMessage.soundElem != null) {
        String? audioPath;
        final pathResult = getActualMediaPath(
          MessageType.audio,
          imMessage.soundElem!.path,
          imMessage.soundElem!.UUID ?? '',
          null,
        );
        if (pathResult[localExistKey]) {
          audioPath = pathResult[filePathKey];
        }

        String? asrText;
        final localCustomData = imMessage.localCustomData;
        if (localCustomData != null && localCustomData.isNotEmpty) {
          final json = jsonData2Dictionary(localCustomData);
          if (json != null) {
            asrText = json['voice_to_text'] as String?;
          }
        }

        return AudioMessagePayload(
          audioSize: imMessage.soundElem?.dataSize ?? 0,
          audioDuration: imMessage.soundElem?.duration ?? 0,
          audioPath: audioPath,
          audioURL: imMessage.soundElem?.url,
          asrText: asrText,
        );
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_FILE:
      if (imMessage.fileElem != null) {
        String? filePath;
        final pathResult = getActualMediaPath(
          MessageType.file,
          imMessage.fileElem!.path,
          imMessage.fileElem!.UUID ?? '',
          null,
        );
        if (pathResult[localExistKey]) {
          filePath = pathResult[filePathKey];
        }

        return FileMessagePayload(
          fileName: imMessage.fileElem?.fileName,
          fileSize: imMessage.fileElem?.fileSize ?? 0,
          filePath: filePath,
          fileURL: imMessage.fileElem?.url,
        );
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_VIDEO:
      if (imMessage.videoElem != null) {
        String? videoSnapshotPath;
        final snapshotResult = getActualMediaPath(
          MessageType.video,
          imMessage.videoElem!.snapshotPath,
          imMessage.videoElem!.snapshotUUID ?? '',
          null,
        );
        if (snapshotResult[localExistKey]) {
          videoSnapshotPath = snapshotResult[filePathKey];
        }

        String? videoPath;
        final videoResult = getActualMediaPath(
          MessageType.video,
          imMessage.videoElem!.videoPath,
          imMessage.videoElem!.UUID ?? '',
          null,
        );
        if (videoResult[localExistKey]) {
          videoPath = videoResult[filePathKey];
        }

        return VideoMessagePayload(
          videoSnapshotWidth: imMessage.videoElem?.snapshotWidth ?? 0,
          videoSnapshotHeight: imMessage.videoElem?.snapshotHeight ?? 0,
          videoSnapshotPath: videoSnapshotPath,
          videoSnapshotURL: imMessage.videoElem?.snapshotUrl,
          videoType: imMessage.videoElem?.videoType,
          videoSize: imMessage.videoElem?.videoSize ?? 0,
          videoDuration: imMessage.videoElem?.duration ?? 0,
          videoPath: videoPath,
          videoURL: imMessage.videoElem?.videoUrl,
        );
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_FACE:
      if (imMessage.faceElem != null) {
        return FaceMessagePayload(
          faceIndex: imMessage.faceElem?.index ?? 0,
          faceData: imMessage.faceElem?.data,
        );
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM:
      if (imMessage.customElem != null) {
        return CustomMessagePayload(
          customData: imMessage.customElem!.data ?? '',
          description: imMessage.customElem!.desc ?? '',
          extensionInfo: imMessage.customElem!.extension ?? '',
        );
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS:
      if (imMessage.groupTipsElem != null) {
        return TipsMessagePayload(groupTips: ChatUtil.convertToSystemInfoFromGroupTips(imMessage.groupTipsElem!));
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_MERGER:
      if (imMessage.mergerElem != null) {
        return MergedMessagePayload(
          title: imMessage.mergerElem!.title ?? '',
          abstractList: imMessage.mergerElem!.abstractList,
        );
      }
      break;

    case MessageElemType.V2TIM_ELEM_TYPE_STREAM:
      if (imMessage.streamElem != null) {
        final streamElem = imMessage.streamElem!;
        return StreamMessagePayload(
          markdown: streamElem.markdown ?? '',
          data: streamElem.data ?? '',
          isStreamEnded: streamElem.isStreamEnded ?? false,
        );
      }
      break;

    default:
      return null;
  }

  return null;
}