restoreEditingDraft method

Future<void> restoreEditingDraft(
  1. RCKChatProvider chatProvider
)

页面消息加载完成后恢复服务端保存的编辑草稿。

Implementation

Future<void> restoreEditingDraft(RCKChatProvider chatProvider) async {
  if (_disposed || isEditing) return;
  final operationId = ++_editOperationId;
  final settingsReady = await chatProvider.waitForMessageEditSettings();
  if (_disposed || operationId != _editOperationId || !settingsReady) return;
  final draft = await chatProvider.getEditedMessageDraft();
  if (_disposed || operationId != _editOperationId || draft == null) return;
  final messageUId = draft.messageUId;
  final decodedDraft = _decodeEditedDraftContent(draft.content);
  final content = decodedDraft.content;
  if (messageUId == null ||
      messageUId.isEmpty ||
      content == null ||
      content.isEmpty) {
    return;
  }
  RCIMIWMessage? message = chatProvider.messageByUId(messageUId);
  var shouldClearDraft =
      message != null && !chatProvider.canEditMessage(message);
  if (message == null) {
    final resolution =
        await chatProvider.resolveEditedDraftMessage(messageUId);
    message = resolution.message;
    shouldClearDraft = resolution.shouldClearDraft;
  }
  if (_disposed || operationId != _editOperationId) return;
  if (message == null || !chatProvider.canEditMessage(message)) {
    if (shouldClearDraft || message != null) {
      await chatProvider.clearEditedMessageDraft();
    }
    return;
  }
  await _startEditing(
    message,
    chatProvider,
    restoredContent: content,
    restoredMentionUserIds: decodedDraft.mentionUserIds,
    restoredMentions: decodedDraft.mentions,
    restoredReferenceStatus: decodedDraft.referenceStatus,
    restoredReferenceContent: decodedDraft.referenceContent,
  );
}