DTxrgUzUPSQGSvcc method
Future<void>
DTxrgUzUPSQGSvcc({
- required YIMEnum_ConversationType conversationType,
- required String conversationID,
- required YIMEnum_MessageType messageType,
- String? content,
- String? fileExt,
- YIMAttachment? attachment,
- YIMPushOption? push = null,
- void callback_start(
- YIMMessage message
- void callback_upload(
- YIMMessage message,
- int count,
- int total
- void callback_finish(
- bool isSuccess,
- YIMMessage message,
- int code,
- 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();
}
}