resolveEditedDraftMessage method

Future<({RCIMIWMessage? message, bool shouldClearDraft})> resolveEditedDraftMessage(
  1. String messageUId
)

恢复编辑草稿时静默查询未加载到首屏的原消息。

查询结果只进入编辑源缓存,不插入消息列表,避免破坏当前分页与排序。

Implementation

Future<({RCIMIWMessage? message, bool shouldClearDraft})>
    resolveEditedDraftMessage(String messageUId) async {
  if (_disposed ||
      _sessionInvalid ||
      !_isSessionCurrent() ||
      messageUId.isEmpty) {
    return (message: null, shouldClearDraft: false);
  }
  final localMessage = messageByUId(messageUId);
  if (localMessage != null) {
    final editable = canEditMessage(localMessage);
    return (
      message: editable ? localMessage : null,
      shouldClearDraft: !editable,
    );
  }

  final result = await _getMessageByUId(messageUId);
  if (result == null || result.code != 0) {
    return (message: null, shouldClearDraft: false);
  }
  final message = result.message;
  if (message == null) {
    return (message: null, shouldClearDraft: true);
  }
  if (message is RCIMIWRecallNotificationMessage) {
    return (message: null, shouldClearDraft: true);
  }
  if (message.conversationType != _con.conversationType ||
      message.targetId != _con.targetId ||
      !_sameChannelId(message.channelId, _con.channelId) ||
      !canEditMessage(message)) {
    return (message: null, shouldClearDraft: true);
  }
  _cacheMessageEditSource(message);
  return (message: message, shouldClearDraft: false);
}