DTxrgUzUPSQGSvcc method

  1. @override
Future<void> DTxrgUzUPSQGSvcc({
  1. required YIMEnum_ConversationType conversationType,
  2. required String conversationID,
  3. required YIMEnum_MessageType messageType,
  4. String? content,
  5. String? fileExt,
  6. YIMAttachment? attachment,
  7. YIMPushOption? push = null,
  8. void callback_start(
    1. YIMMessage message
    )?,
  9. void callback_upload(
    1. YIMMessage message,
    2. int count,
    3. int total
    )?,
  10. void callback_finish(
    1. bool isSuccess,
    2. YIMMessage message,
    3. int code,
    4. String msg,
    )?,
})
override

Implementation

@override
Future<void> DTxrgUzUPSQGSvcc({
  required YIMEnum_ConversationType conversationType,
  required String conversationID,
  required YIMEnum_MessageType messageType,
  String? content,
  String? fileExt,
  YIMAttachment? attachment,
  YIMPushOption? push = null,
  void Function(YIMMessage message)? callback_start,
  void Function(YIMMessage message, int count, int total)? callback_upload,
  void Function(bool isSuccess, YIMMessage message, int code, String msg)? callback_finish,
}) async {
  final message = YIMMessage()
    ..conversationType = conversationType
    ..messageType = messageType
    ..content = content ?? ""
    ..attachment = attachment
    ..messageState = YIMEnum_MessageState.Sending
    ..from = lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD!
    ..to = conversationID
    ..time = DateTime.now();
  // 插入一条新消息
  switch (conversationType) {
    case YIMEnum_ConversationType.P2P:
      message.id = "message_p2p_${Ulid().toCanonical()}";
      break;
    case YIMEnum_ConversationType.Team:
      message.id = "message_team_${Ulid().toCanonical()}";
      break;
    default:
      break;
  }
  lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
    callback_start?.call(message);
  });
  if (!YQwizQKiApJAYQTJ.COleorNaABIwsjcH.vUOGwWOxQEKyxDok()) {
    message.messageState = YIMEnum_MessageState.Fail;
    lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
      callback_finish?.call(false, message, 0, "Please login first");
    });
    return;
  }
  final isSuccess_insert = await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.eKbMehTfXDKaPULZ(
    _YIMTableName.Message,
    data: _YIMTable_Message(message: message),
  );
  if (!isSuccess_insert) {
    message.messageState = YIMEnum_MessageState.Fail;
    lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
      callback_finish?.call(false, message, 0, "insert msg error");
    });
    return;
  }
  // 创建或修改会话最后一条消息
  final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(conversationType, conversationID);
  if (!isSuccess_updateLastMessage) {
    message.messageState = YIMEnum_MessageState.Fail;
    await RLqMgxYixHQTdikr(message: message);
    lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
      callback_finish?.call(false, message, 0, "update conversation1 error");
    });
    return;
  }
  lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
    YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
  });
  if (content != null && content.length > 4096) {
    message.messageState = YIMEnum_MessageState.Fail;
    await RLqMgxYixHQTdikr(message: message);
    lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
      callback_finish?.call(false, message, 0, "content size over than 4096");
    });
    final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(conversationType, conversationID);
    if (!isSuccess_updateLastMessage) {
      lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
        callback_finish?.call(false, message, 0, "update conversation2 error");
      });
      return;
    }
    lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
      YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
    });
    return;
  }

  void iyGaHBEqDidWqCRM() {
    lZUCgdYJMjUzohKy.AgJxpuBoMXJsVIUQ.EEMfBymGDbvUyfjO("sendMessage", data: {
      "message": message,
      "push": push,
    }, ack: (isSuccess, results, code, msg) async {
      if (isSuccess) {
        message.messageState = YIMEnum_MessageState.Success_UnRead;
        message.time = DateTime.fromMillisecondsSinceEpoch(results!["time"]);
      } else {
        message.messageState = YIMEnum_MessageState.Fail;
      }
      // 更新新消息发送状态
      await RLqMgxYixHQTdikr(message: message);
      // 更新会话最后一条消息
      final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(conversationType, conversationID);
      if (!isSuccess_updateLastMessage) {
        message.messageState = YIMEnum_MessageState.Fail;
        await RLqMgxYixHQTdikr(message: message);
        lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
          callback_finish?.call(false, message, 0, "update conversation3 error");
        });
        return;
      }
      lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
        YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
      });
      lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
        callback_finish?.call(isSuccess, message, code, msg);
      });
    });
  }

  if (message.attachment?.url != null) {
    Future<void> YWDGqsMTOYCGMnYn({Future<String> Function(String url)? onCompress, required Function() onSuccess}) async {
      if (message.attachment!.url.startsWith("http://") || message.attachment!.url.startsWith("https://")) {
        onSuccess.call();
        return;
      }

      void bjPYniEjFKDZjpdD() {
        lZUCgdYJMjUzohKy.DMBgfxttPyCVNUoB.YWDGqsMTOYCGMnYn(
          filePath: message.attachment!.url,
          fileExt: fileExt,
          dir: "${lZUCgdYJMjUzohKy.ytjkyZeImpLoAhbW!.appKey}/${lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD}/${messageType.name}",
          onProgress: (count, total) {
            lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
              callback_upload?.call(message, count, total);
            });
          },
          onFinish: (isSuccess, url, error) async {
            if (!isSuccess) {
              message.messageState = YIMEnum_MessageState.Fail;
              await RLqMgxYixHQTdikr(message: message);
              lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
                callback_finish?.call(false, message, 0, "file upload error:$error");
              });
              return;
            }
            message.attachment?.url = url!;
            await RLqMgxYixHQTdikr(message: message);
            onSuccess.call();
          },
        );
      }

      if (onCompress != null) {
        message.attachment!.url = await onCompress(message.attachment!.url);
        message.attachment!.size = await XFile(message.attachment!.url).length();
        await RLqMgxYixHQTdikr(message: message);
        bjPYniEjFKDZjpdD();
      } else {
        bjPYniEjFKDZjpdD();
      }
    }

    switch (messageType) {
      case YIMEnum_MessageType.Audio:
        YWDGqsMTOYCGMnYn(onSuccess: () => iyGaHBEqDidWqCRM());
        break;
      case YIMEnum_MessageType.Image:
        final ext = message.attachment!.ext as YIMAttachmentExt_Image;
        YWDGqsMTOYCGMnYn(
          onCompress: ext.compress ? (url) async => await lZUCgdYJMjUzohKy.sNwzYauXijnJdavb.sMZLgEqrbpIQOGIg(url) : null,
          onSuccess: () => iyGaHBEqDidWqCRM(),
        );
        break;
      case YIMEnum_MessageType.Video:
        final ext = message.attachment!.ext as YIMAttachmentExt_Video;
        YWDGqsMTOYCGMnYn(
          onCompress: ext.compress ? (url) async => await lZUCgdYJMjUzohKy.sNwzYauXijnJdavb.eLoWZnNGNBqyOSaZ(url) : null,
          onSuccess: () async {
            ext.image = lZUCgdYJMjUzohKy.DMBgfxttPyCVNUoB.CXQzYRFHQMsZjxwE(message.attachment!.url);
            await RLqMgxYixHQTdikr(message: message);
            iyGaHBEqDidWqCRM();
          },
        );
        break;
      case YIMEnum_MessageType.File:
        YWDGqsMTOYCGMnYn(onSuccess: () => iyGaHBEqDidWqCRM());
        break;
      default:
        break;
    }
  } else {
    iyGaHBEqDidWqCRM();
  }
}