GqoEHhpoCHioBjeX method
Future<void>
GqoEHhpoCHioBjeX({
- required YIMEnum_ConversationType TMhjsByyUuXcscSR,
- required String APZrxmPSOMdFqrhE,
- required YIMEnum_MessageType hhhoJoDMDtRYJkyz,
- String? pWNMGXBBcLdiMDHi,
- String? jGVNVbwqSBVVFZbB,
- YIMAttachment? pSxxqGuiMDhtCqDl,
- YIMPushOption? vIxExKsyXmvzKfNM = null,
- bool qbVSXxdVhiVIymnB = false,
- void ecAHJiMeypETVSxO(
- YIMMessage message
- void uBjCVJTPLCEQLFbc(
- YIMMessage message,
- int count,
- int total
- void hQEmfmSHWbVnfOjU(
- bool BYQhAOcHRUuLSvkg,
- YIMMessage message,
- int code,
- String msg,
override
Implementation
@override
Future<void> GqoEHhpoCHioBjeX({
required YIMEnum_ConversationType TMhjsByyUuXcscSR,
required String APZrxmPSOMdFqrhE,
required YIMEnum_MessageType hhhoJoDMDtRYJkyz,
String? pWNMGXBBcLdiMDHi,
String? jGVNVbwqSBVVFZbB,
YIMAttachment? pSxxqGuiMDhtCqDl,
YIMPushOption? vIxExKsyXmvzKfNM = null,
bool qbVSXxdVhiVIymnB = false,
void Function(YIMMessage message)? ecAHJiMeypETVSxO,
void Function(YIMMessage message, int count, int total)? uBjCVJTPLCEQLFbc,
void Function(bool BYQhAOcHRUuLSvkg, YIMMessage message, int code, String msg)? hQEmfmSHWbVnfOjU,
}) async {
Future<void> pfFZQjlgsGKqhWSK(YIMInfo? nJJoiJJmhKhkIEpJ) async {
final LzYZgypaJvlVWNba = YIMMessage()
..conversationType = TMhjsByyUuXcscSR
..messageType = hhhoJoDMDtRYJkyz
..content = pWNMGXBBcLdiMDHi ?? ""
..attachment = pSxxqGuiMDhtCqDl
..messageState = YIMEnum_MessageState.Sending
..from = LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ!
..fromInfo = LLTqoNwdULMbTCMh.jgLTIuyajFGofHiY
..to = APZrxmPSOMdFqrhE
..toInfo = nJJoiJJmhKhkIEpJ ?? (YIMInfo()..id = APZrxmPSOMdFqrhE)
..time = DateTime.now();
// 插入一条新消息
switch (TMhjsByyUuXcscSR) {
case YIMEnum_ConversationType.P2P:
LzYZgypaJvlVWNba.id = "message_p2p_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.Team:
LzYZgypaJvlVWNba.id = "message_team_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.ChatRoom:
LzYZgypaJvlVWNba.id = "message_room_${Ulid().toCanonical()}";
break;
default:
break;
}
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
ecAHJiMeypETVSxO?.call(LzYZgypaJvlVWNba);
});
if (!UFWAGwHDnWMkeYVR.EPwtIwAAPGFWUsid.WPtNMuRLJwMSwfMW()) {
LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
hQEmfmSHWbVnfOjU?.call(false, LzYZgypaJvlVWNba, 0, "Please login first");
});
return;
}
if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(TMhjsByyUuXcscSR)) {
await LLTqoNwdULMbTCMh.fWmDEyWlYlSzIgZn.vINnFFQGnIJPZAIj(
_YIMTableName.Message,
mCBPWMvoUJveFdlV: _YIMTable_Message(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba),
);
Filter? RyDvVcXmnThgbKWY;
switch (TMhjsByyUuXcscSR) {
case YIMEnum_ConversationType.P2P:
RyDvVcXmnThgbKWY = Filter.and([
Filter.or([
Filter.and([Filter.equals("lastMessage.from", LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ), Filter.equals("lastMessage.to", APZrxmPSOMdFqrhE)]),
Filter.and([Filter.equals("lastMessage.to", LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ), Filter.equals("lastMessage.from", APZrxmPSOMdFqrhE)]),
]),
Filter.equals("lastMessage.conversationType", TMhjsByyUuXcscSR.rawValue),
]);
break;
case YIMEnum_ConversationType.Team:
RyDvVcXmnThgbKWY = Filter.and([
Filter.equals("lastMessage.to", APZrxmPSOMdFqrhE),
Filter.equals("lastMessage.conversationType", TMhjsByyUuXcscSR.rawValue),
]);
break;
case YIMEnum_ConversationType.ChatRoom:
RyDvVcXmnThgbKWY = Filter.and([
Filter.equals("lastMessage.conversationType", TMhjsByyUuXcscSR.rawValue),
]);
break;
}
var ksHlUMCxsMwUBrvE = (await LLTqoNwdULMbTCMh.fWmDEyWlYlSzIgZn.JHzMkZIpOnZbQRwO<_YIMTable_Conversation>(
_YIMTableName.Conversation,
KgQmNjCadrqeQjJE: (map) => _YIMTable_Conversation.fromJson(map),
RaxVrYLTOIwElzzS: Finder(filter: RyDvVcXmnThgbKWY),
))!;
final drfbZZKgjrUXPQYW = ksHlUMCxsMwUBrvE.isEmpty;
// 创建或修改会话最后一条消息
await UFWAGwHDnWMkeYVR.uzkozbjuyYvNIrYu.wMubTEqkFbXrseOf(TMhjsByyUuXcscSR, APZrxmPSOMdFqrhE);
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
UFWAGwHDnWMkeYVR.drSbAyhOZTsmWGTg.wFocFAyakMKTXEwq?.call();
});
ksHlUMCxsMwUBrvE = (await LLTqoNwdULMbTCMh.fWmDEyWlYlSzIgZn.JHzMkZIpOnZbQRwO<_YIMTable_Conversation>(
_YIMTableName.Conversation,
KgQmNjCadrqeQjJE: (map) => _YIMTable_Conversation.fromJson(map),
RaxVrYLTOIwElzzS: Finder(filter: RyDvVcXmnThgbKWY),
))!;
if (drfbZZKgjrUXPQYW) {
//新增的会话
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
UFWAGwHDnWMkeYVR.drSbAyhOZTsmWGTg.fwpmsLrZmnkZYHpn?.call(ksHlUMCxsMwUBrvE.map((e) => YIMConversation(tmmBlSfEBRBRYXTr: e)).toList());
});
} else {
//原有的会话
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
UFWAGwHDnWMkeYVR.drSbAyhOZTsmWGTg.xwwJXzdAXRAijlBN?.call(ksHlUMCxsMwUBrvE.map((e) => YIMConversation(tmmBlSfEBRBRYXTr: e)).toList());
});
}
}
if (pWNMGXBBcLdiMDHi != null && pWNMGXBBcLdiMDHi.length > 4096) {
LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
hQEmfmSHWbVnfOjU?.call(false, LzYZgypaJvlVWNba, 0, "content size over than 4096");
});
return;
}
if (qbVSXxdVhiVIymnB) return;
void UserBYFTdAGggcmI() {
LLTqoNwdULMbTCMh.rkgLYlaZYATBeHZH.sEnkoxXAwuAQuaxN("sendMessage", mCBPWMvoUJveFdlV: {
"message": LzYZgypaJvlVWNba,
"push": vIxExKsyXmvzKfNM,
}, YDAPNnFGlbnwsGKD: (BYQhAOcHRUuLSvkg, IvMCaaSVIWcQArzH, oCgstdHjeFkEZJjg, cDeQIDiofjWaDrqG) async {
if (BYQhAOcHRUuLSvkg) {
LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Success_UnRead;
LzYZgypaJvlVWNba.time = DateTime.fromMillisecondsSinceEpoch(IvMCaaSVIWcQArzH!["time"]);
LzYZgypaJvlVWNba.toInfo = YIMInfo.fromJson(IvMCaaSVIWcQArzH["toInfo"]);
} else {
LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
}
// 更新新消息发送状态
await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
hQEmfmSHWbVnfOjU?.call(BYQhAOcHRUuLSvkg, LzYZgypaJvlVWNba, oCgstdHjeFkEZJjg, cDeQIDiofjWaDrqG);
});
});
}
if (LzYZgypaJvlVWNba.attachment?.url != null) {
Future<void> IYWvYPRSJekqCEEX({Future<String> Function(String url)? zoczGnjwqutbnEip, required Function() eZPLAeGIVykDAhie}) async {
if (LzYZgypaJvlVWNba.attachment!.url.startsWith("http://") || LzYZgypaJvlVWNba.attachment!.url.startsWith("https://")) {
eZPLAeGIVykDAhie.call();
return;
}
void KBgfhjLoufvgvcyp() {
LLTqoNwdULMbTCMh.vwIBJtuDcnHAfSXz.IYWvYPRSJekqCEEX(
cTFtyhUyTjrxXhaB: LzYZgypaJvlVWNba.attachment!.url,
jGVNVbwqSBVVFZbB: jGVNVbwqSBVVFZbB,
HgJpocucwKHqnYGe: "${LLTqoNwdULMbTCMh.yWiKPzRWuKnMOmDg!.appKey}/${LLTqoNwdULMbTCMh.IemXKsVNcGUWeUgJ}/${hhhoJoDMDtRYJkyz.name}",
NwETUbuRJduoSsiH: (count, total) {
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
uBjCVJTPLCEQLFbc?.call(LzYZgypaJvlVWNba, count, total);
});
},
tYWHjgcGPgFRkKIM: (BYQhAOcHRUuLSvkg, url, error) async {
if (!BYQhAOcHRUuLSvkg) {
LzYZgypaJvlVWNba.messageState = YIMEnum_MessageState.Fail;
await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
LLTqoNwdULMbTCMh.DwbTkDIljwhCkWxz.KuzgoGyXoqDTCcrr(() {
hQEmfmSHWbVnfOjU?.call(false, LzYZgypaJvlVWNba, 0, "file upload error:$error");
});
return;
}
LzYZgypaJvlVWNba.attachment?.url = url!;
await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
eZPLAeGIVykDAhie.call();
},
);
}
if (zoczGnjwqutbnEip != null) {
LzYZgypaJvlVWNba.attachment!.url = await zoczGnjwqutbnEip(LzYZgypaJvlVWNba.attachment!.url);
LzYZgypaJvlVWNba.attachment!.size = await XFile(LzYZgypaJvlVWNba.attachment!.url).length();
await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
KBgfhjLoufvgvcyp();
} else {
KBgfhjLoufvgvcyp();
}
}
switch (hhhoJoDMDtRYJkyz) {
case YIMEnum_MessageType.Audio:
IYWvYPRSJekqCEEX(eZPLAeGIVykDAhie: () => UserBYFTdAGggcmI());
break;
case YIMEnum_MessageType.Image:
final SNxzUrjofxRyIUqR = LzYZgypaJvlVWNba.attachment!.ext as YIMAttachmentExt_Image;
IYWvYPRSJekqCEEX(
zoczGnjwqutbnEip: SNxzUrjofxRyIUqR.compress ? (url) async => await LLTqoNwdULMbTCMh.mZmeuZIRbeugluVu.QStDVRtVSlvyuShq(url) : null,
eZPLAeGIVykDAhie: () => UserBYFTdAGggcmI(),
);
break;
case YIMEnum_MessageType.Video:
final SNxzUrjofxRyIUqR = LzYZgypaJvlVWNba.attachment!.ext as YIMAttachmentExt_Video;
IYWvYPRSJekqCEEX(
zoczGnjwqutbnEip: SNxzUrjofxRyIUqR.compress ? (url) async => await LLTqoNwdULMbTCMh.mZmeuZIRbeugluVu.bHAxdrIMufRrrStv(url) : null,
eZPLAeGIVykDAhie: () async {
SNxzUrjofxRyIUqR.image = LLTqoNwdULMbTCMh.vwIBJtuDcnHAfSXz.rtBDGKESdNjhwXml(LzYZgypaJvlVWNba.attachment!.url);
await bBCnNVNpEtaDPQgS(LzYZgypaJvlVWNba: LzYZgypaJvlVWNba);
UserBYFTdAGggcmI();
},
);
break;
case YIMEnum_MessageType.File:
IYWvYPRSJekqCEEX(eZPLAeGIVykDAhie: () => UserBYFTdAGggcmI());
break;
default:
break;
}
} else {
UserBYFTdAGggcmI();
}
}
UFWAGwHDnWMkeYVR.uzkozbjuyYvNIrYu.ajTLACjgidEMYssN(WeQhHiCFWrXRykFU: (uPYgvxFwWZJlLsIn) {
final ELXjQlSjetoxvWEy = uPYgvxFwWZJlLsIn?.where((element) => element.getConversatinoID() == APZrxmPSOMdFqrhE);
if (ELXjQlSjetoxvWEy != null && ELXjQlSjetoxvWEy.isNotEmpty) {
switch (ELXjQlSjetoxvWEy.first.lastMessage.conversationType) {
case YIMEnum_ConversationType.P2P:
if (ELXjQlSjetoxvWEy.first.getIsMine()) {
pfFZQjlgsGKqhWSK(ELXjQlSjetoxvWEy.first.lastMessage.toInfo);
} else {
pfFZQjlgsGKqhWSK(ELXjQlSjetoxvWEy.first.lastMessage.fromInfo);
}
break;
default:
pfFZQjlgsGKqhWSK(ELXjQlSjetoxvWEy.first.lastMessage.toInfo);
break;
}
} else {
pfFZQjlgsGKqhWSK(null);
}
});
}