resolveMessageForEditing method

Future<RCIMIWMessage?> resolveMessageForEditing(
  1. RCIMIWMessage original
)

提交前按 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;
}