RgMYGyBpAktMCILO method
Future<void>
RgMYGyBpAktMCILO({
- required YIMEnum_ConversationType sZLnmTKeJUdmBFHE,
- required String DLwuDqfWcelSXXhD,
- required YIMEnum_MessageType NFFqeKRHtAVYYGYQ,
- String? ZXiWwdPsOsDFIbxX,
- String? lTrFtkYpftSMNzmn,
- YIMAttachment? GvptjZbHlqCirUPs,
- YIMPushOption? YxcFziNqPfUNMAiS = null,
- bool jujWgdWREbZUtHry = false,
- void RrsqBWEXnAUcHXDQ(
- YIMMessage message
- void XOBlSFIFFNmgMIgo(
- YIMMessage message,
- int count,
- int total
- void FDZFqQsWicmdpmvh(
- bool oTLKfnnymNCTXHML,
- YIMMessage message,
- int code,
- String msg,
override
Implementation
@override
Future<void> RgMYGyBpAktMCILO({
required YIMEnum_ConversationType sZLnmTKeJUdmBFHE,
required String DLwuDqfWcelSXXhD,
required YIMEnum_MessageType NFFqeKRHtAVYYGYQ,
String? ZXiWwdPsOsDFIbxX,
String? lTrFtkYpftSMNzmn,
YIMAttachment? GvptjZbHlqCirUPs,
YIMPushOption? YxcFziNqPfUNMAiS = null,
bool jujWgdWREbZUtHry = false,
void Function(YIMMessage message)? RrsqBWEXnAUcHXDQ,
void Function(YIMMessage message, int count, int total)? XOBlSFIFFNmgMIgo,
void Function(bool oTLKfnnymNCTXHML, YIMMessage message, int code, String msg)? FDZFqQsWicmdpmvh,
}) async {
Future<void> waVsXGvUVRjwqOmb(YIMInfo? QWEODEcKdmNhvCPj) async {
final mWEnrkpgWgfnODZg = YIMMessage()
..conversationType = sZLnmTKeJUdmBFHE
..messageType = NFFqeKRHtAVYYGYQ
..content = ZXiWwdPsOsDFIbxX ?? ""
..attachment = GvptjZbHlqCirUPs
..messageState = YIMEnum_MessageState.Sending
..from = eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA!
..fromInfo = eFtbLxhxTmdNVKuo.plJXjIOyvNhjneLH
..to = DLwuDqfWcelSXXhD
..toInfo = QWEODEcKdmNhvCPj ?? (YIMInfo()..id = DLwuDqfWcelSXXhD)
..time = DateTime.now();
// 插入一条新消息
switch (sZLnmTKeJUdmBFHE) {
case YIMEnum_ConversationType.P2P:
mWEnrkpgWgfnODZg.id = "message_p2p_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.Team:
mWEnrkpgWgfnODZg.id = "message_team_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.ChatRoom:
mWEnrkpgWgfnODZg.id = "message_room_${Ulid().toCanonical()}";
break;
default:
break;
}
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
RrsqBWEXnAUcHXDQ?.call(mWEnrkpgWgfnODZg);
});
if (!ptLoDBriUoBUHreo.uvWNunbGgtEdyNiW.otQyjQrYNfRgpyCy()) {
mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
FDZFqQsWicmdpmvh?.call(false, mWEnrkpgWgfnODZg, 0, "Please login first");
});
return;
}
if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(sZLnmTKeJUdmBFHE)) {
await eFtbLxhxTmdNVKuo.HsDBYdwzkEBPFhmJ.NxTIiSKVXcgMzjSL(
_YIMTableName.Message,
DEzbKDIBPJVTWSIB: _YIMTable_Message(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg),
);
Filter? TKUJvkDHgZbFgVJv;
switch (sZLnmTKeJUdmBFHE) {
case YIMEnum_ConversationType.P2P:
TKUJvkDHgZbFgVJv = Filter.and([
Filter.or([
Filter.and([Filter.equals("lastMessage.from", eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA), Filter.equals("lastMessage.to", DLwuDqfWcelSXXhD)]),
Filter.and([Filter.equals("lastMessage.to", eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA), Filter.equals("lastMessage.from", DLwuDqfWcelSXXhD)]),
]),
Filter.equals("lastMessage.conversationType", sZLnmTKeJUdmBFHE.rawValue),
]);
break;
case YIMEnum_ConversationType.Team:
TKUJvkDHgZbFgVJv = Filter.and([
Filter.equals("lastMessage.to", DLwuDqfWcelSXXhD),
Filter.equals("lastMessage.conversationType", sZLnmTKeJUdmBFHE.rawValue),
]);
break;
case YIMEnum_ConversationType.ChatRoom:
TKUJvkDHgZbFgVJv = Filter.and([
Filter.equals("lastMessage.conversationType", sZLnmTKeJUdmBFHE.rawValue),
]);
break;
}
var BByVDaYVEweNgSCl = (await eFtbLxhxTmdNVKuo.HsDBYdwzkEBPFhmJ.LUwlOqRgyVmlEiyp<_YIMTable_Conversation>(
_YIMTableName.Conversation,
sprgVkbCCQhGYFSK: (map) => _YIMTable_Conversation.fromJson(map),
PldCyxtbMzvNSNom: Finder(filter: TKUJvkDHgZbFgVJv),
))!;
final KyUToNKdasnYcrci = BByVDaYVEweNgSCl.isEmpty;
// 创建或修改会话最后一条消息
await ptLoDBriUoBUHreo.PDCrHbGmsBdFRajZ.seQaUCGGFYuCERMG(sZLnmTKeJUdmBFHE, DLwuDqfWcelSXXhD);
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
ptLoDBriUoBUHreo.CTCflLMwyPmjZPwH.vbkGgBUjJANFBecG?.call();
});
BByVDaYVEweNgSCl = (await eFtbLxhxTmdNVKuo.HsDBYdwzkEBPFhmJ.LUwlOqRgyVmlEiyp<_YIMTable_Conversation>(
_YIMTableName.Conversation,
sprgVkbCCQhGYFSK: (map) => _YIMTable_Conversation.fromJson(map),
PldCyxtbMzvNSNom: Finder(filter: TKUJvkDHgZbFgVJv),
))!;
if (KyUToNKdasnYcrci) {
//新增的会话
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
ptLoDBriUoBUHreo.CTCflLMwyPmjZPwH.bNtqOyRWxOrowAZX?.call(BByVDaYVEweNgSCl.map((e) => YIMConversation(gxECQohXBcwxDNVO: e)).toList());
});
} else {
//原有的会话
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
ptLoDBriUoBUHreo.CTCflLMwyPmjZPwH.ILHvgzQbwdReWqoO?.call(BByVDaYVEweNgSCl.map((e) => YIMConversation(gxECQohXBcwxDNVO: e)).toList());
});
}
}
if (ZXiWwdPsOsDFIbxX != null && ZXiWwdPsOsDFIbxX.length > 4096) {
mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
FDZFqQsWicmdpmvh?.call(false, mWEnrkpgWgfnODZg, 0, "content size over than 4096");
});
return;
}
if (jujWgdWREbZUtHry) return;
void BJIEZlNNgPcIOZeK() {
eFtbLxhxTmdNVKuo.TRicabbJmwhKdzbv.jodencItUatiSpEH("sendMessage", DEzbKDIBPJVTWSIB: {
"message": mWEnrkpgWgfnODZg,
"push": YxcFziNqPfUNMAiS,
}, YzQRKyskQzveDVYH: (oTLKfnnymNCTXHML, OhXEEEJrHsRvZogG, iggZzorTFvICOSCL, PBMZMubGZDFjYEYt) async {
if (oTLKfnnymNCTXHML) {
mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Success_UnRead;
mWEnrkpgWgfnODZg.time = DateTime.fromMillisecondsSinceEpoch(OhXEEEJrHsRvZogG!["time"]);
mWEnrkpgWgfnODZg.toInfo = YIMInfo.fromJson(OhXEEEJrHsRvZogG["toInfo"]);
} else {
mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
}
// 更新新消息发送状态
await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
FDZFqQsWicmdpmvh?.call(oTLKfnnymNCTXHML, mWEnrkpgWgfnODZg, iggZzorTFvICOSCL, PBMZMubGZDFjYEYt);
});
});
}
if (mWEnrkpgWgfnODZg.attachment?.url != null) {
Future<void> dyTzxrZHlbMyoijK({Future<String> Function(String url)? PXskHbBHevBnklJi, required Function() MshvDHjtbgkCRPRT}) async {
if (mWEnrkpgWgfnODZg.attachment!.url.startsWith("http://") || mWEnrkpgWgfnODZg.attachment!.url.startsWith("https://")) {
MshvDHjtbgkCRPRT.call();
return;
}
void BzGXmbCesdSYcwnc() {
eFtbLxhxTmdNVKuo.COWyOzFujUqyiEde.dyTzxrZHlbMyoijK(
MaYCMzBDIzlEYMzs: mWEnrkpgWgfnODZg.attachment!.url,
lTrFtkYpftSMNzmn: lTrFtkYpftSMNzmn,
zwedurJlGPAFAeDP: "${eFtbLxhxTmdNVKuo.XOnHYWRkDBCzQOUO!.appKey}/${eFtbLxhxTmdNVKuo.hBYZOFteqhkvDgHA}/${NFFqeKRHtAVYYGYQ.name}",
kyWapwAiXYXTGPIA: (count, total) {
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
XOBlSFIFFNmgMIgo?.call(mWEnrkpgWgfnODZg, count, total);
});
},
AjOdsioGJRrmvWkh: (oTLKfnnymNCTXHML, url, error) async {
if (!oTLKfnnymNCTXHML) {
mWEnrkpgWgfnODZg.messageState = YIMEnum_MessageState.Fail;
await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
eFtbLxhxTmdNVKuo.WeloVHMlcPVpCsCr.vUWyYsqBHvAmVrYc(() {
FDZFqQsWicmdpmvh?.call(false, mWEnrkpgWgfnODZg, 0, "file upload error:$error");
});
return;
}
mWEnrkpgWgfnODZg.attachment?.url = url!;
await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
MshvDHjtbgkCRPRT.call();
},
);
}
if (PXskHbBHevBnklJi != null) {
mWEnrkpgWgfnODZg.attachment!.url = await PXskHbBHevBnklJi(mWEnrkpgWgfnODZg.attachment!.url);
mWEnrkpgWgfnODZg.attachment!.size = await XFile(mWEnrkpgWgfnODZg.attachment!.url).length();
await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
BzGXmbCesdSYcwnc();
} else {
BzGXmbCesdSYcwnc();
}
}
switch (NFFqeKRHtAVYYGYQ) {
case YIMEnum_MessageType.Audio:
dyTzxrZHlbMyoijK(MshvDHjtbgkCRPRT: () => BJIEZlNNgPcIOZeK());
break;
case YIMEnum_MessageType.Image:
final fmbzezwDcJMRSgCh = mWEnrkpgWgfnODZg.attachment!.ext as YIMAttachmentExt_Image;
dyTzxrZHlbMyoijK(
PXskHbBHevBnklJi: fmbzezwDcJMRSgCh.compress ? (url) async => await eFtbLxhxTmdNVKuo.DTLEMalsAniQYJAA.lhISGEpwyibWPTmd(url) : null,
MshvDHjtbgkCRPRT: () => BJIEZlNNgPcIOZeK(),
);
break;
case YIMEnum_MessageType.Video:
final fmbzezwDcJMRSgCh = mWEnrkpgWgfnODZg.attachment!.ext as YIMAttachmentExt_Video;
dyTzxrZHlbMyoijK(
PXskHbBHevBnklJi: fmbzezwDcJMRSgCh.compress ? (url) async => await eFtbLxhxTmdNVKuo.DTLEMalsAniQYJAA.ptEdOXKSJXsjEhAt(url) : null,
MshvDHjtbgkCRPRT: () async {
fmbzezwDcJMRSgCh.image = eFtbLxhxTmdNVKuo.COWyOzFujUqyiEde.PMgnmhAlGTRGCuds(mWEnrkpgWgfnODZg.attachment!.url);
await cDCrRRvlWwZqcZPg(mWEnrkpgWgfnODZg: mWEnrkpgWgfnODZg);
BJIEZlNNgPcIOZeK();
},
);
break;
case YIMEnum_MessageType.File:
dyTzxrZHlbMyoijK(MshvDHjtbgkCRPRT: () => BJIEZlNNgPcIOZeK());
break;
default:
break;
}
} else {
BJIEZlNNgPcIOZeK();
}
}
ptLoDBriUoBUHreo.PDCrHbGmsBdFRajZ.nkzuzrGKwvUcdDEb(OMKwYKeBBFVoTNBl: (ykNlEVGzREbGjoZV) {
final rKWugczjwYbQViNH = ykNlEVGzREbGjoZV?.where((element) => element.getConversatinoID() == DLwuDqfWcelSXXhD);
if (rKWugczjwYbQViNH != null && rKWugczjwYbQViNH.isNotEmpty) {
switch (rKWugczjwYbQViNH.first.lastMessage.conversationType) {
case YIMEnum_ConversationType.P2P:
if (rKWugczjwYbQViNH.first.getIsMine()) {
waVsXGvUVRjwqOmb(rKWugczjwYbQViNH.first.lastMessage.toInfo);
} else {
waVsXGvUVRjwqOmb(rKWugczjwYbQViNH.first.lastMessage.fromInfo);
}
break;
default:
waVsXGvUVRjwqOmb(rKWugczjwYbQViNH.first.lastMessage.toInfo);
break;
}
} else {
waVsXGvUVRjwqOmb(null);
}
});
}