mYKaFYUjvYZOWuZB method
Future<void>
mYKaFYUjvYZOWuZB({
- required YIMEnum_ConversationType TIVvnmucZCCCoXWZ,
- required String DdEJLInBukyevMKs,
- required YIMEnum_MessageType EiRjaLJyoekAXvfO,
- String? VNXtVBoZudfncesZ,
- String? UZjQPwKKBftipoNw,
- YIMAttachment? yAxgAMAldXwbyuHy,
- YIMPushOption? uHrDKqGhYwFfFjzt = null,
- bool eFLZtwaPtnBZJJFl = false,
- void oEwVYbdGNiYrQhbg(
- YIMMessage message
- void WmGDNPHAWOMlPvEy(
- YIMMessage message,
- int count,
- int total
- void dNSrphLqsPPgGsKF(
- bool IWxelvVBXdhLiYGw,
- YIMMessage message,
- int code,
- String msg,
override
Implementation
@override
Future<void> mYKaFYUjvYZOWuZB({
required YIMEnum_ConversationType TIVvnmucZCCCoXWZ,
required String DdEJLInBukyevMKs,
required YIMEnum_MessageType EiRjaLJyoekAXvfO,
String? VNXtVBoZudfncesZ,
String? UZjQPwKKBftipoNw,
YIMAttachment? yAxgAMAldXwbyuHy,
YIMPushOption? uHrDKqGhYwFfFjzt = null,
bool eFLZtwaPtnBZJJFl = false,
void Function(YIMMessage message)? oEwVYbdGNiYrQhbg,
void Function(YIMMessage message, int count, int total)? WmGDNPHAWOMlPvEy,
void Function(bool IWxelvVBXdhLiYGw, YIMMessage message, int code, String msg)? dNSrphLqsPPgGsKF,
}) async {
Future<void> mGlkRXKEByvJGnio(YIMInfo? hjRcYygkDIaSlMBr) async {
final kCwocHxVzlSDCcUI = YIMMessage()
..conversationType = TIVvnmucZCCCoXWZ
..messageType = EiRjaLJyoekAXvfO
..content = VNXtVBoZudfncesZ ?? ""
..attachment = yAxgAMAldXwbyuHy
..messageState = YIMEnum_MessageState.Sending
..from = lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM!
..fromInfo = lnHdKoLeAXayLaTQ.ikCtvzoxOumWKvvj
..to = DdEJLInBukyevMKs
..toInfo = hjRcYygkDIaSlMBr ?? (YIMInfo()..id = DdEJLInBukyevMKs)
..time = DateTime.now();
// 插入一条新消息
switch (TIVvnmucZCCCoXWZ) {
case YIMEnum_ConversationType.P2P:
kCwocHxVzlSDCcUI.id = "message_p2p_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.Team:
kCwocHxVzlSDCcUI.id = "message_team_${Ulid().toCanonical()}";
break;
case YIMEnum_ConversationType.ChatRoom:
kCwocHxVzlSDCcUI.id = "message_room_${Ulid().toCanonical()}";
break;
default:
break;
}
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
oEwVYbdGNiYrQhbg?.call(kCwocHxVzlSDCcUI);
});
if (!UChfQaxIZXBHpDHw.njDzuTHDjwOofRwd.anPqdZrnWKekLPyp()) {
kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
dNSrphLqsPPgGsKF?.call(false, kCwocHxVzlSDCcUI, 0, "Please login first");
});
return;
}
if ([YIMEnum_ConversationType.P2P, YIMEnum_ConversationType.Team].contains(TIVvnmucZCCCoXWZ)) {
await lnHdKoLeAXayLaTQ.vByYuYitJBHbvUKL.jtsnVpZoATWiaSlU(
_YIMTableName.Message,
JUQwIovWWbGEtXed: _YIMTable_Message(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI),
);
Filter? PViwEfkxnHthuFaW;
switch (TIVvnmucZCCCoXWZ) {
case YIMEnum_ConversationType.P2P:
PViwEfkxnHthuFaW = Filter.and([
Filter.or([
Filter.and([Filter.equals("lastMessage.from", lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM), Filter.equals("lastMessage.to", DdEJLInBukyevMKs)]),
Filter.and([Filter.equals("lastMessage.to", lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM), Filter.equals("lastMessage.from", DdEJLInBukyevMKs)]),
]),
Filter.equals("lastMessage.conversationType", TIVvnmucZCCCoXWZ.rawValue),
]);
break;
case YIMEnum_ConversationType.Team:
PViwEfkxnHthuFaW = Filter.and([
Filter.equals("lastMessage.to", DdEJLInBukyevMKs),
Filter.equals("lastMessage.conversationType", TIVvnmucZCCCoXWZ.rawValue),
]);
break;
case YIMEnum_ConversationType.ChatRoom:
PViwEfkxnHthuFaW = Filter.and([
Filter.equals("lastMessage.conversationType", TIVvnmucZCCCoXWZ.rawValue),
]);
break;
}
var dtmfXZcFGyRKHKIm = (await lnHdKoLeAXayLaTQ.vByYuYitJBHbvUKL.uKKZjqnYwajOojnf<_YIMTable_Conversation>(
_YIMTableName.Conversation,
kXTnRNGoMYqcQtxj: (map) => _YIMTable_Conversation.fromJson(map),
fnfSorwGDrYrXXrJ: Finder(filter: PViwEfkxnHthuFaW),
))!;
final RgiipeBdQbKTfboo = dtmfXZcFGyRKHKIm.isEmpty;
// 创建或修改会话最后一条消息
await UChfQaxIZXBHpDHw.VurOaXdcuMhmFxOY.PZljnyQTHQWpRuih(TIVvnmucZCCCoXWZ, DdEJLInBukyevMKs);
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
UChfQaxIZXBHpDHw.hTyLGxoJhBOoadid.zYXHYCxBRzMmefXt?.call();
});
dtmfXZcFGyRKHKIm = (await lnHdKoLeAXayLaTQ.vByYuYitJBHbvUKL.uKKZjqnYwajOojnf<_YIMTable_Conversation>(
_YIMTableName.Conversation,
kXTnRNGoMYqcQtxj: (map) => _YIMTable_Conversation.fromJson(map),
fnfSorwGDrYrXXrJ: Finder(filter: PViwEfkxnHthuFaW),
))!;
if (RgiipeBdQbKTfboo) {
//新增的会话
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
UChfQaxIZXBHpDHw.hTyLGxoJhBOoadid.tvXnKsJjYewLWIsE?.call(dtmfXZcFGyRKHKIm.map((e) => YIMConversation(BXiYJGYbkPLwuERt: e)).toList());
});
} else {
//原有的会话
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
UChfQaxIZXBHpDHw.hTyLGxoJhBOoadid.rMqppijxSRmKvvLu?.call(dtmfXZcFGyRKHKIm.map((e) => YIMConversation(BXiYJGYbkPLwuERt: e)).toList());
});
}
}
if (VNXtVBoZudfncesZ != null && VNXtVBoZudfncesZ.length > 4096) {
kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
dNSrphLqsPPgGsKF?.call(false, kCwocHxVzlSDCcUI, 0, "content size over than 4096");
});
return;
}
if (eFLZtwaPtnBZJJFl) return;
void oSwPAbjjlGZQXWYM() {
lnHdKoLeAXayLaTQ.IDteDTVOmCXMeoaZ.xAbmkiHIVdSWVdsf("sendMessage", JUQwIovWWbGEtXed: {
"message": kCwocHxVzlSDCcUI,
"push": uHrDKqGhYwFfFjzt,
}, jCuQmdbQKfCyjgLe: (IWxelvVBXdhLiYGw, iRnmzMAYPMjltgiU, RIJJEwowWZYrUgoB, ojKzdeKHBwmcEOBz) async {
if (IWxelvVBXdhLiYGw) {
kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Success_UnRead;
kCwocHxVzlSDCcUI.time = DateTime.fromMillisecondsSinceEpoch(iRnmzMAYPMjltgiU!["time"]);
kCwocHxVzlSDCcUI.toInfo = YIMInfo.fromJson(iRnmzMAYPMjltgiU["toInfo"]);
} else {
kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
}
// 更新新消息发送状态
await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
dNSrphLqsPPgGsKF?.call(IWxelvVBXdhLiYGw, kCwocHxVzlSDCcUI, RIJJEwowWZYrUgoB, ojKzdeKHBwmcEOBz);
});
});
}
if (kCwocHxVzlSDCcUI.attachment?.url != null) {
Future<void> PgcTEveYegCWwilv({Future<String> Function(String url)? PURnMxTUuhIoXoNg, required Function() FJXZeMGeLhImxvMj}) async {
if (kCwocHxVzlSDCcUI.attachment!.url.startsWith("http://") || kCwocHxVzlSDCcUI.attachment!.url.startsWith("https://")) {
FJXZeMGeLhImxvMj.call();
return;
}
void SarGjCVhvhkbLBkD() {
lnHdKoLeAXayLaTQ.daTsWHmsUCmfYRlx.PgcTEveYegCWwilv(
iTYbTOvgPjQlKLzR: kCwocHxVzlSDCcUI.attachment!.url,
UZjQPwKKBftipoNw: UZjQPwKKBftipoNw,
dNXlVvtonczvNCUe: "${lnHdKoLeAXayLaTQ.faQkRmckBLGLNpdu!.appKey}/${lnHdKoLeAXayLaTQ.wkoLiCQozKacYjmM}/${EiRjaLJyoekAXvfO.name}",
IUOibztRaKyDvydl: (count, total) {
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
WmGDNPHAWOMlPvEy?.call(kCwocHxVzlSDCcUI, count, total);
});
},
khwOlvKiXaOvUXYc: (IWxelvVBXdhLiYGw, url, error) async {
if (!IWxelvVBXdhLiYGw) {
kCwocHxVzlSDCcUI.messageState = YIMEnum_MessageState.Fail;
await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
lnHdKoLeAXayLaTQ.hqSwzyClHgtHzAja.bhMrnZZKiorcTBJp(() {
dNSrphLqsPPgGsKF?.call(false, kCwocHxVzlSDCcUI, 0, "file upload error:$error");
});
return;
}
kCwocHxVzlSDCcUI.attachment?.url = url!;
await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
FJXZeMGeLhImxvMj.call();
},
);
}
if (PURnMxTUuhIoXoNg != null) {
kCwocHxVzlSDCcUI.attachment!.url = await PURnMxTUuhIoXoNg(kCwocHxVzlSDCcUI.attachment!.url);
kCwocHxVzlSDCcUI.attachment!.size = await XFile(kCwocHxVzlSDCcUI.attachment!.url).length();
await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
SarGjCVhvhkbLBkD();
} else {
SarGjCVhvhkbLBkD();
}
}
switch (EiRjaLJyoekAXvfO) {
case YIMEnum_MessageType.Audio:
PgcTEveYegCWwilv(FJXZeMGeLhImxvMj: () => oSwPAbjjlGZQXWYM());
break;
case YIMEnum_MessageType.Image:
final KWVoqAhkyoqdgtgg = kCwocHxVzlSDCcUI.attachment!.ext as YIMAttachmentExt_Image;
PgcTEveYegCWwilv(
PURnMxTUuhIoXoNg: KWVoqAhkyoqdgtgg.compress ? (url) async => await lnHdKoLeAXayLaTQ.XonrGWjTpqOPuBKd.rxIKmMEJPoqIIHtJ(url) : null,
FJXZeMGeLhImxvMj: () => oSwPAbjjlGZQXWYM(),
);
break;
case YIMEnum_MessageType.Video:
final KWVoqAhkyoqdgtgg = kCwocHxVzlSDCcUI.attachment!.ext as YIMAttachmentExt_Video;
PgcTEveYegCWwilv(
PURnMxTUuhIoXoNg: KWVoqAhkyoqdgtgg.compress ? (url) async => await lnHdKoLeAXayLaTQ.XonrGWjTpqOPuBKd.ESgocCntrRgYxOyC(url) : null,
FJXZeMGeLhImxvMj: () async {
KWVoqAhkyoqdgtgg.image = lnHdKoLeAXayLaTQ.daTsWHmsUCmfYRlx.bsaBcnzZENGLaGFH(kCwocHxVzlSDCcUI.attachment!.url);
await JIqPgRlOlgMpHQUW(kCwocHxVzlSDCcUI: kCwocHxVzlSDCcUI);
oSwPAbjjlGZQXWYM();
},
);
break;
case YIMEnum_MessageType.File:
PgcTEveYegCWwilv(FJXZeMGeLhImxvMj: () => oSwPAbjjlGZQXWYM());
break;
default:
break;
}
} else {
oSwPAbjjlGZQXWYM();
}
}
UChfQaxIZXBHpDHw.VurOaXdcuMhmFxOY.TjMCUKWVAiKboQQH(dFOzKXrUQFAiVUMV: (mvNVnlaAbMjTUWGG) {
final DKQICclTFUKexNla = mvNVnlaAbMjTUWGG?.where((element) => element.getConversatinoID() == DdEJLInBukyevMKs);
if (DKQICclTFUKexNla != null && DKQICclTFUKexNla.isNotEmpty) {
switch (DKQICclTFUKexNla.first.lastMessage.conversationType) {
case YIMEnum_ConversationType.P2P:
if (DKQICclTFUKexNla.first.getIsMine()) {
mGlkRXKEByvJGnio(DKQICclTFUKexNla.first.lastMessage.toInfo);
} else {
mGlkRXKEByvJGnio(DKQICclTFUKexNla.first.lastMessage.fromInfo);
}
break;
default:
mGlkRXKEByvJGnio(DKQICclTFUKexNla.first.lastMessage.toInfo);
break;
}
} else {
mGlkRXKEByvJGnio(null);
}
});
}