resolveMessageForEditing method
提交前按 UID 获取最新本地消息,避免删除、撤回或过期消息退出编辑态。
Implementation
Future<RCIMIWMessage?> resolveMessageForEditing(
RCIMIWMessage original,
) async {
if (_disposed ||
_sessionInvalid ||
!_isSessionCurrent() ||
!_isMessageStructurallyEditable(original)) {
_notifyMessageEditError(20114);
return null;
}
final targetEngine = _sessionEngine;
final messageUId = original.messageUId;
if (targetEngine == null || messageUId == null || messageUId.isEmpty) {
_notifyMessageEditError(-1);
return null;
}
if (_notifyMessageEditTerminalState(messageUId)) return null;
final result = await _getMessageByUId(messageUId);
if (result == null) return null;
if (_notifyMessageEditTerminalState(messageUId)) return null;
if (result.code != 0) {
_notifyMessageEditError(result.code ?? -1);
return null;
}
final message = result.message;
if (message == null) {
_notifyMessageEditError(22201, deleted: true);
return null;
}
if (message is RCIMIWRecallNotificationMessage) {
_notifyMessageEditError(22201, recalled: true);
return null;
}
if (message.conversationType != _con.conversationType ||
message.targetId != _con.targetId ||
!_sameChannelId(message.channelId, _con.channelId)) {
_notifyMessageEditError(20114);
return null;
}
if (!_isMessageStructurallyEditable(message) ||
!engineProvider.isMessageModifiable(message.sentTime)) {
_notifyMessageEditError(20114);
return null;
}
return message;
}