ODoEXvBcmcXHcGxA method
Future<void>
ODoEXvBcmcXHcGxA({
- required YIMEnum_ConversationType FhjdxBSxQMYGyidK,
- required String vINCQVmsnelWAFiE,
- required YIMEnum_MessageType emyCfpbAqaBRvied,
- String? jyGrjvexFspFYkTx,
- String? MZYYCseyHDIiPuZX,
- YIMAttachment? GlTawvIobfbIZrok,
- YIMPushOption? uVAXjPfKCzuYRoJu = null,
- bool jGozHRRUYjUFvVCL = false,
- void cXOfRbhlCgpfZxZG(
- YIMMessage message
- void vRDFbOUHPLiVRNZO(
- YIMMessage message,
- int count,
- int total
- void kQwsXzoVfyDQSSHC(
- bool vlIVOpmRlppDVoLJ,
- YIMMessage message,
- int code,
- String msg,
override
Implementation
@override
Future<void> ODoEXvBcmcXHcGxA({
required YIMEnum_ConversationType FhjdxBSxQMYGyidK,
required String vINCQVmsnelWAFiE,
required YIMEnum_MessageType emyCfpbAqaBRvied,
String? jyGrjvexFspFYkTx,
String? MZYYCseyHDIiPuZX,
YIMAttachment? GlTawvIobfbIZrok,
YIMPushOption? uVAXjPfKCzuYRoJu = null,
bool jGozHRRUYjUFvVCL = false,
void Function(YIMMessage message)? cXOfRbhlCgpfZxZG,
void Function(YIMMessage message, int count, int total)? vRDFbOUHPLiVRNZO,
void Function(bool vlIVOpmRlppDVoLJ, YIMMessage message, int code, String msg)? kQwsXzoVfyDQSSHC,
}) async {
Future<void> jZuVKtWrfLkoNKiv(YIMInfo? hkosCDZlYEHgvwFc) async {
final NouDniwlzyGmGpUJ = YIMMessage()
..conversationType = FhjdxBSxQMYGyidK
..messageType = emyCfpbAqaBRvied
..content = jyGrjvexFspFYkTx ?? ""
..attachment = GlTawvIobfbIZrok
..messageState = YIMEnum_MessageState.Sending
..from = pUedSqApqySLXfuk.HDRcNNpDAaYaKnho!
..fromInfo = pUedSqApqySLXfuk.LNoEFVterpfBmSay
..to = vINCQVmsnelWAFiE
..toInfo = hkosCDZlYEHgvwFc ?? (YIMInfo()..id = vINCQVmsnelWAFiE)
..time = DateTime.now();
// 插入一条新消息
switch (FhjdxBSxQMYGyidK) {
case YIMEnum_ConversationType.P2P:
NouDniwlzyGmGpUJ.id = "message_p2p_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.Team:
NouDniwlzyGmGpUJ.id = "message_team_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.ChatRoom:
NouDniwlzyGmGpUJ.id = "message_room_${Ulid().toCanonical()}";
break;
default:
break;
}
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
cXOfRbhlCgpfZxZG?.call(NouDniwlzyGmGpUJ);
});
if (!iDxDuKoCRjwSpSnP.lUBagJdrpVTUiLlL.nJlQLbYMmygXrVIu()) {
NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
kQwsXzoVfyDQSSHC?.call(false, NouDniwlzyGmGpUJ, 0, "Please login first");
});
return;
}
if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(FhjdxBSxQMYGyidK)) {
await pUedSqApqySLXfuk.ahWEMLhfSiuhBwFl.xHLoiYMIgKDYsInU(
_YIMTableName.Message,
rFbpbySHruxzmGYR: _YIMTable_Message(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ),
);
Filter? PczaErAOrgmnlYTK;
switch (FhjdxBSxQMYGyidK) {
case YIMEnum_ConversationType.P2P:
PczaErAOrgmnlYTK = Filter.and([
Filter.or([
Filter.and([Filter.equals("lastMessage.from", pUedSqApqySLXfuk.HDRcNNpDAaYaKnho), Filter.equals("lastMessage.to", vINCQVmsnelWAFiE)]),
Filter.and([Filter.equals("lastMessage.to", pUedSqApqySLXfuk.HDRcNNpDAaYaKnho), Filter.equals("lastMessage.from", vINCQVmsnelWAFiE)]),
]),
Filter.equals("lastMessage.conversationType", FhjdxBSxQMYGyidK.rawValue),
]);
break;
case YIMEnum_ConversationType.Team:
PczaErAOrgmnlYTK = Filter.and([
Filter.equals("lastMessage.to", vINCQVmsnelWAFiE),
Filter.equals("lastMessage.conversationType", FhjdxBSxQMYGyidK.rawValue),
]);
break;
case YIMEnum_ConversationType.ChatRoom:
PczaErAOrgmnlYTK = Filter.and([
Filter.equals("lastMessage.conversationType", FhjdxBSxQMYGyidK.rawValue),
]);
break;
}
var RJJZEVUaxDvrzUJv = (await pUedSqApqySLXfuk.ahWEMLhfSiuhBwFl.wanYqaCFigqxxdwW<_YIMTable_Conversation>(
_YIMTableName.Conversation,
BozapwVfDLDEsXet: (map) => _YIMTable_Conversation.fromJson(map),
bNcvVipPUFFpNiXa: Finder(filter: PczaErAOrgmnlYTK),
))!;
final eOjAveOTJaooLdQm = RJJZEVUaxDvrzUJv.isEmpty;
// 创建或修改会话最后一条消息
await iDxDuKoCRjwSpSnP.fzjbYoEllDvCcigm.VJhqgocOoZnovLIz(FhjdxBSxQMYGyidK, vINCQVmsnelWAFiE);
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
iDxDuKoCRjwSpSnP.tAlpmicvlJCqimjh.UuYFyMelxcIiuATS?.call();
});
RJJZEVUaxDvrzUJv = (await pUedSqApqySLXfuk.ahWEMLhfSiuhBwFl.wanYqaCFigqxxdwW<_YIMTable_Conversation>(
_YIMTableName.Conversation,
BozapwVfDLDEsXet: (map) => _YIMTable_Conversation.fromJson(map),
bNcvVipPUFFpNiXa: Finder(filter: PczaErAOrgmnlYTK),
))!;
if (eOjAveOTJaooLdQm) {
//新增的会话
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
iDxDuKoCRjwSpSnP.tAlpmicvlJCqimjh.yjsVNFOgyFcFDUjI?.call(RJJZEVUaxDvrzUJv.map((e) => YIMConversation(OxbmHPoYuPTpcmgT: e)).toList());
});
} else {
//原有的会话
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
iDxDuKoCRjwSpSnP.tAlpmicvlJCqimjh.WXBRvbiPvYYuBfEB?.call(RJJZEVUaxDvrzUJv.map((e) => YIMConversation(OxbmHPoYuPTpcmgT: e)).toList());
});
}
}
if (jyGrjvexFspFYkTx != null && jyGrjvexFspFYkTx.length > 4096) {
NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
kQwsXzoVfyDQSSHC?.call(false, NouDniwlzyGmGpUJ, 0, "content size over than 4096");
});
return;
}
if (jGozHRRUYjUFvVCL) return;
void ABPXZbmRenDDRcXg() {
pUedSqApqySLXfuk.KpxKYjvUKTKwfqjk.kvxCwDBIcIBVbdEA("sendMessage", rFbpbySHruxzmGYR: {
"message": NouDniwlzyGmGpUJ,
"push": uVAXjPfKCzuYRoJu,
}, iwKloQCTGRoPHvpN: (vlIVOpmRlppDVoLJ, hvZigxghgcRFFwdO, pvovyYaVxMwKNREX, PJqUrrwaWORPhMvl) async {
if (vlIVOpmRlppDVoLJ) {
NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Success_UnRead;
NouDniwlzyGmGpUJ.time = DateTime.fromMillisecondsSinceEpoch(hvZigxghgcRFFwdO!["time"]);
NouDniwlzyGmGpUJ.toInfo = YIMInfo.fromJson(hvZigxghgcRFFwdO["toInfo"]);
} else {
NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
}
// 更新新消息发送状态
await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
kQwsXzoVfyDQSSHC?.call(vlIVOpmRlppDVoLJ, NouDniwlzyGmGpUJ, pvovyYaVxMwKNREX, PJqUrrwaWORPhMvl);
});
});
}
if (NouDniwlzyGmGpUJ.attachment?.url != null) {
Future<void> WpPiwyrFNbddbiqA({Future<String> Function(String url)? XUgDAWGfRAyLdPMx, required Function() COvnnKXeTdapRQAk}) async {
if (NouDniwlzyGmGpUJ.attachment!.url.startsWith("http://") || NouDniwlzyGmGpUJ.attachment!.url.startsWith("https://")) {
COvnnKXeTdapRQAk.call();
return;
}
void nJIvAufjKwnFOFod() {
pUedSqApqySLXfuk.LkauoVbLzIsCeEvr.WpPiwyrFNbddbiqA(
TtxoseDbzqRBFETL: NouDniwlzyGmGpUJ.attachment!.url,
MZYYCseyHDIiPuZX: MZYYCseyHDIiPuZX,
pJFvRHuIynkhwrYG: "${pUedSqApqySLXfuk.skXQQIaSsaiDhaLc!.appKey}/${pUedSqApqySLXfuk.HDRcNNpDAaYaKnho}/${emyCfpbAqaBRvied.name}",
tJCFXtNxuYKjkxle: (count, total) {
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
vRDFbOUHPLiVRNZO?.call(NouDniwlzyGmGpUJ, count, total);
});
},
tQjwMUpeRcXitaIP: (vlIVOpmRlppDVoLJ, url, error) async {
if (!vlIVOpmRlppDVoLJ) {
NouDniwlzyGmGpUJ.messageState = YIMEnum_MessageState.Fail;
await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
pUedSqApqySLXfuk.UdAwLgllDinVqLkg.JraVUDkLNAsqCzWV(() {
kQwsXzoVfyDQSSHC?.call(false, NouDniwlzyGmGpUJ, 0, "file upload error:$error");
});
return;
}
NouDniwlzyGmGpUJ.attachment?.url = url!;
await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
COvnnKXeTdapRQAk.call();
},
);
}
if (XUgDAWGfRAyLdPMx != null) {
NouDniwlzyGmGpUJ.attachment!.url = await XUgDAWGfRAyLdPMx(NouDniwlzyGmGpUJ.attachment!.url);
NouDniwlzyGmGpUJ.attachment!.size = await XFile(NouDniwlzyGmGpUJ.attachment!.url).length();
await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
nJIvAufjKwnFOFod();
} else {
nJIvAufjKwnFOFod();
}
}
switch (emyCfpbAqaBRvied) {
case YIMEnum_MessageType.Audio:
WpPiwyrFNbddbiqA(COvnnKXeTdapRQAk: () => ABPXZbmRenDDRcXg());
break;
case YIMEnum_MessageType.Image:
final MKnoWqBLNNfIvtjL = NouDniwlzyGmGpUJ.attachment!.ext as YIMAttachmentExt_Image;
WpPiwyrFNbddbiqA(
XUgDAWGfRAyLdPMx: MKnoWqBLNNfIvtjL.compress ? (url) async => await pUedSqApqySLXfuk.ZzkeZNuALKxgOeSn.dLpDLVopjvfaThxf(url) : null,
COvnnKXeTdapRQAk: () => ABPXZbmRenDDRcXg(),
);
break;
case YIMEnum_MessageType.Video:
final MKnoWqBLNNfIvtjL = NouDniwlzyGmGpUJ.attachment!.ext as YIMAttachmentExt_Video;
WpPiwyrFNbddbiqA(
XUgDAWGfRAyLdPMx: MKnoWqBLNNfIvtjL.compress ? (url) async => await pUedSqApqySLXfuk.ZzkeZNuALKxgOeSn.FmDFsgrImFpkzKwq(url) : null,
COvnnKXeTdapRQAk: () async {
MKnoWqBLNNfIvtjL.image = pUedSqApqySLXfuk.LkauoVbLzIsCeEvr.ndYDniLbyosgbkCN(NouDniwlzyGmGpUJ.attachment!.url);
await zVVTdvoPFePrERdF(NouDniwlzyGmGpUJ: NouDniwlzyGmGpUJ);
ABPXZbmRenDDRcXg();
},
);
break;
case YIMEnum_MessageType.File:
WpPiwyrFNbddbiqA(COvnnKXeTdapRQAk: () => ABPXZbmRenDDRcXg());
break;
default:
break;
}
} else {
ABPXZbmRenDDRcXg();
}
}
iDxDuKoCRjwSpSnP.fzjbYoEllDvCcigm.eUSSMDZGAOtpUEYZ(fDsWzZmHzuvhjHYF: (soFwquLayEmGnujs) {
final BrKTflrAMmxtyIhS = soFwquLayEmGnujs?.where((element) => element.getConversatinoID() == vINCQVmsnelWAFiE);
if (BrKTflrAMmxtyIhS != null && BrKTflrAMmxtyIhS.isNotEmpty) {
switch (BrKTflrAMmxtyIhS.first.lastMessage.conversationType) {
case YIMEnum_ConversationType.P2P:
if (BrKTflrAMmxtyIhS.first.getIsMine()) {
jZuVKtWrfLkoNKiv(BrKTflrAMmxtyIhS.first.lastMessage.toInfo);
} else {
jZuVKtWrfLkoNKiv(BrKTflrAMmxtyIhS.first.lastMessage.fromInfo);
}
break;
default:
jZuVKtWrfLkoNKiv(BrKTflrAMmxtyIhS.first.lastMessage.toInfo);
break;
}
} else {
jZuVKtWrfLkoNKiv(null);
}
});
}