mFPVlsscRMYuYnqp method
Future<void>
mFPVlsscRMYuYnqp({
- required YIMEnum_ConversationType BgfAEObZrclDbHGn,
- required String fRzBwkFTgPAvTbAa,
- required YIMEnum_MessageType TrlYWgGousfaVHdx,
- String? nkeEPpTrFTimzIms,
- String? rnsKJBnYDwlxadJe,
- YIMAttachment? sKQjjyWpawmWkgIN,
- YIMPushOption? XGhZbaZiUqYuqmWQ = null,
- bool LyUNauEnmoGAESIa = false,
- void DTcSRIkzRBVRMxRY(
- YIMMessage message
- void ruBlhnNOkyhaehfX(
- YIMMessage message,
- int count,
- int total
- void YsjEAwqlXTWQzmUO(
- bool HNMwGFsvIPdZudoP,
- YIMMessage message,
- int code,
- String msg,
override
Implementation
@override
Future<void> mFPVlsscRMYuYnqp({
required YIMEnum_ConversationType BgfAEObZrclDbHGn,
required String fRzBwkFTgPAvTbAa,
required YIMEnum_MessageType TrlYWgGousfaVHdx,
String? nkeEPpTrFTimzIms,
String? rnsKJBnYDwlxadJe,
YIMAttachment? sKQjjyWpawmWkgIN,
YIMPushOption? XGhZbaZiUqYuqmWQ = null,
bool LyUNauEnmoGAESIa = false,
void Function(YIMMessage message)? DTcSRIkzRBVRMxRY,
void Function(YIMMessage message, int count, int total)? ruBlhnNOkyhaehfX,
void Function(bool HNMwGFsvIPdZudoP, YIMMessage message, int code, String msg)? YsjEAwqlXTWQzmUO,
}) async {
Future<void> RSpxztZllaKwnBAm(YIMInfo? vpWPiJHRRvBRCAEb) async {
final kmHFaoDMcNOfZpRN = YIMMessage()
..conversationType = BgfAEObZrclDbHGn
..messageType = TrlYWgGousfaVHdx
..content = nkeEPpTrFTimzIms ?? ""
..attachment = sKQjjyWpawmWkgIN
..messageState = YIMEnum_MessageState.Sending
..from = RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM!
..fromInfo = RgTTqSEnxRPxFwzl.lyCZGqmwzLKqDevq
..to = fRzBwkFTgPAvTbAa
..toInfo = vpWPiJHRRvBRCAEb ?? (YIMInfo()..id = fRzBwkFTgPAvTbAa)
..time = DateTime.now();
// 插入一条新消息
switch (BgfAEObZrclDbHGn) {
case YIMEnum_ConversationType.P2P:
kmHFaoDMcNOfZpRN.id = "message_p2p_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.Team:
kmHFaoDMcNOfZpRN.id = "message_team_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.ChatRoom:
kmHFaoDMcNOfZpRN.id = "message_room_${Ulid().toCanonical()}";
break;
default:
break;
}
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
DTcSRIkzRBVRMxRY?.call(kmHFaoDMcNOfZpRN);
});
if (!TOguPJtIdcSeGZGX.rBuDdhLENqbkPPvE.NeoEyBnRdnWKwFxT()) {
kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
YsjEAwqlXTWQzmUO?.call(false, kmHFaoDMcNOfZpRN, 0, "Please login first");
});
return;
}
if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(BgfAEObZrclDbHGn)) {
await RgTTqSEnxRPxFwzl.XYSDgLkjooSuxQxj.KWTuCQNebcXsffPu(
_YIMTableName.Message,
GlIXyNxjXRjKcoLX: _YIMTable_Message(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN),
);
Filter? zIeqXzcaEvxPpBIs;
switch (BgfAEObZrclDbHGn) {
case YIMEnum_ConversationType.P2P:
zIeqXzcaEvxPpBIs = Filter.and([
Filter.or([
Filter.and([Filter.equals("lastMessage.from", RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM), Filter.equals("lastMessage.to", fRzBwkFTgPAvTbAa)]),
Filter.and([Filter.equals("lastMessage.to", RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM), Filter.equals("lastMessage.from", fRzBwkFTgPAvTbAa)]),
]),
Filter.equals("lastMessage.conversationType", BgfAEObZrclDbHGn.rawValue),
]);
break;
case YIMEnum_ConversationType.Team:
zIeqXzcaEvxPpBIs = Filter.and([
Filter.equals("lastMessage.to", fRzBwkFTgPAvTbAa),
Filter.equals("lastMessage.conversationType", BgfAEObZrclDbHGn.rawValue),
]);
break;
case YIMEnum_ConversationType.ChatRoom:
zIeqXzcaEvxPpBIs = Filter.and([
Filter.equals("lastMessage.conversationType", BgfAEObZrclDbHGn.rawValue),
]);
break;
}
var BvJTVmnFgEFpwQtQ = (await RgTTqSEnxRPxFwzl.XYSDgLkjooSuxQxj.mIfLIZlbruepMfyA<_YIMTable_Conversation>(
_YIMTableName.Conversation,
AssMtxrsCpVcieAX: (map) => _YIMTable_Conversation.fromJson(map),
IaZSeQoXPmnqurCt: Finder(filter: zIeqXzcaEvxPpBIs),
))!;
final GxjJVVZTfAAFSOOe = BvJTVmnFgEFpwQtQ.isEmpty;
// 创建或修改会话最后一条消息
await TOguPJtIdcSeGZGX.qcEqJQAppCXqglUJ.RNFknVLCuPJTcxUh(BgfAEObZrclDbHGn, fRzBwkFTgPAvTbAa);
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
TOguPJtIdcSeGZGX.TfAfmudNuGQoHhbb.lEMTnluMYwHrTztH?.call();
});
BvJTVmnFgEFpwQtQ = (await RgTTqSEnxRPxFwzl.XYSDgLkjooSuxQxj.mIfLIZlbruepMfyA<_YIMTable_Conversation>(
_YIMTableName.Conversation,
AssMtxrsCpVcieAX: (map) => _YIMTable_Conversation.fromJson(map),
IaZSeQoXPmnqurCt: Finder(filter: zIeqXzcaEvxPpBIs),
))!;
if (GxjJVVZTfAAFSOOe) {
//新增的会话
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
TOguPJtIdcSeGZGX.TfAfmudNuGQoHhbb.OWWGiDgcnjSHuYOM?.call(BvJTVmnFgEFpwQtQ.map((e) => YIMConversation(RbOFBoUMiGshbGjp: e)).toList());
});
} else {
//原有的会话
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
TOguPJtIdcSeGZGX.TfAfmudNuGQoHhbb.PWZOJJpoenSGGruJ?.call(BvJTVmnFgEFpwQtQ.map((e) => YIMConversation(RbOFBoUMiGshbGjp: e)).toList());
});
}
}
if (nkeEPpTrFTimzIms != null && nkeEPpTrFTimzIms.length > 4096) {
kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
YsjEAwqlXTWQzmUO?.call(false, kmHFaoDMcNOfZpRN, 0, "content size over than 4096");
});
return;
}
if (LyUNauEnmoGAESIa) return;
void JzbWlqiaaguZldLV() {
RgTTqSEnxRPxFwzl.EuaPwsZVIqeyUiTs.zbgQyaSxTZRIXxzk("sendMessage", GlIXyNxjXRjKcoLX: {
"message": kmHFaoDMcNOfZpRN,
"push": XGhZbaZiUqYuqmWQ,
}, rMjlZMNvtlJSxSWt: (HNMwGFsvIPdZudoP, BYjAdmrVoQXFvmBX, cbqBlPPvVikjecgS, YDevfGtnNcdOmnZK) async {
if (HNMwGFsvIPdZudoP) {
kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Success_UnRead;
kmHFaoDMcNOfZpRN.time = DateTime.fromMillisecondsSinceEpoch(BYjAdmrVoQXFvmBX!["time"]);
kmHFaoDMcNOfZpRN.toInfo = YIMInfo.fromJson(BYjAdmrVoQXFvmBX["toInfo"]);
} else {
kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
}
// 更新新消息发送状态
await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
YsjEAwqlXTWQzmUO?.call(HNMwGFsvIPdZudoP, kmHFaoDMcNOfZpRN, cbqBlPPvVikjecgS, YDevfGtnNcdOmnZK);
});
});
}
if (kmHFaoDMcNOfZpRN.attachment?.url != null) {
Future<void> IcJMhZVmRIsCxRVg({Future<String> Function(String url)? ouKNauKOrNJjNAeY, required Function() XssvgFpkPXOiNIOR}) async {
if (kmHFaoDMcNOfZpRN.attachment!.url.startsWith("http://") || kmHFaoDMcNOfZpRN.attachment!.url.startsWith("https://")) {
XssvgFpkPXOiNIOR.call();
return;
}
void BxIaCjqUYrRHspLV() {
RgTTqSEnxRPxFwzl.CaEGsqxdNhwofbGA.IcJMhZVmRIsCxRVg(
XIzyodYxKHbDbsTL: kmHFaoDMcNOfZpRN.attachment!.url,
rnsKJBnYDwlxadJe: rnsKJBnYDwlxadJe,
lbuHziiWuTWYNVmX: "${RgTTqSEnxRPxFwzl.IieTTXdlodOUEaHh!.appKey}/${RgTTqSEnxRPxFwzl.KXZihjAgwIbphLgM}/${TrlYWgGousfaVHdx.name}",
dlVALVWgUIIZOdtL: (count, total) {
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
ruBlhnNOkyhaehfX?.call(kmHFaoDMcNOfZpRN, count, total);
});
},
CDcUTDkTePiAdKCD: (HNMwGFsvIPdZudoP, url, error) async {
if (!HNMwGFsvIPdZudoP) {
kmHFaoDMcNOfZpRN.messageState = YIMEnum_MessageState.Fail;
await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
RgTTqSEnxRPxFwzl.CfKfGgNeZazCORbX.LrMzRSTzQmONyVIm(() {
YsjEAwqlXTWQzmUO?.call(false, kmHFaoDMcNOfZpRN, 0, "file upload error:$error");
});
return;
}
kmHFaoDMcNOfZpRN.attachment?.url = url!;
await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
XssvgFpkPXOiNIOR.call();
},
);
}
if (ouKNauKOrNJjNAeY != null) {
kmHFaoDMcNOfZpRN.attachment!.url = await ouKNauKOrNJjNAeY(kmHFaoDMcNOfZpRN.attachment!.url);
kmHFaoDMcNOfZpRN.attachment!.size = await XFile(kmHFaoDMcNOfZpRN.attachment!.url).length();
await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
BxIaCjqUYrRHspLV();
} else {
BxIaCjqUYrRHspLV();
}
}
switch (TrlYWgGousfaVHdx) {
case YIMEnum_MessageType.Audio:
IcJMhZVmRIsCxRVg(XssvgFpkPXOiNIOR: () => JzbWlqiaaguZldLV());
break;
case YIMEnum_MessageType.Image:
final qCKqYtgMivYIgdZC = kmHFaoDMcNOfZpRN.attachment!.ext as YIMAttachmentExt_Image;
IcJMhZVmRIsCxRVg(
ouKNauKOrNJjNAeY: qCKqYtgMivYIgdZC.compress ? (url) async => await RgTTqSEnxRPxFwzl.noqSENKAQxMYtaJy.NYJYFAGENpHTJIVF(url) : null,
XssvgFpkPXOiNIOR: () => JzbWlqiaaguZldLV(),
);
break;
case YIMEnum_MessageType.Video:
final qCKqYtgMivYIgdZC = kmHFaoDMcNOfZpRN.attachment!.ext as YIMAttachmentExt_Video;
IcJMhZVmRIsCxRVg(
ouKNauKOrNJjNAeY: qCKqYtgMivYIgdZC.compress ? (url) async => await RgTTqSEnxRPxFwzl.noqSENKAQxMYtaJy.yPJFYTxIMhomkGJp(url) : null,
XssvgFpkPXOiNIOR: () async {
qCKqYtgMivYIgdZC.image = RgTTqSEnxRPxFwzl.CaEGsqxdNhwofbGA.GiwJGCAXiPJtriIV(kmHFaoDMcNOfZpRN.attachment!.url);
await BmrvHRdmdxFLYVzH(kmHFaoDMcNOfZpRN: kmHFaoDMcNOfZpRN);
JzbWlqiaaguZldLV();
},
);
break;
case YIMEnum_MessageType.File:
IcJMhZVmRIsCxRVg(XssvgFpkPXOiNIOR: () => JzbWlqiaaguZldLV());
break;
default:
break;
}
} else {
JzbWlqiaaguZldLV();
}
}
TOguPJtIdcSeGZGX.qcEqJQAppCXqglUJ.mfRDqyLVGZXBnAUb(RpTfEMreuKahSHPQ: (lmLThEnDJPcSwcIu) {
final wemrDvzIEMLUxAPN = lmLThEnDJPcSwcIu?.where((element) => element.getConversatinoID() == fRzBwkFTgPAvTbAa);
if (wemrDvzIEMLUxAPN != null && wemrDvzIEMLUxAPN.isNotEmpty) {
switch (wemrDvzIEMLUxAPN.first.lastMessage.conversationType) {
case YIMEnum_ConversationType.P2P:
if (wemrDvzIEMLUxAPN.first.getIsMine()) {
RSpxztZllaKwnBAm(wemrDvzIEMLUxAPN.first.lastMessage.toInfo);
} else {
RSpxztZllaKwnBAm(wemrDvzIEMLUxAPN.first.lastMessage.fromInfo);
}
break;
default:
RSpxztZllaKwnBAm(wemrDvzIEMLUxAPN.first.lastMessage.toInfo);
break;
}
} else {
RSpxztZllaKwnBAm(null);
}
});
}