getEditedMessageDraft method

Future<RCIMIWEditedMessageDraft?> getEditedMessageDraft()

Implementation

Future<RCIMIWEditedMessageDraft?> getEditedMessageDraft() async {
  if (!_canUseMessageEditDrafts) return null;
  final targetEngine = _sessionEngine;
  if (targetEngine == null) return null;
  final completer = Completer<RCIMIWEditedMessageDraft?>();
  bool completed = false;
  void complete(RCIMIWEditedMessageDraft? draft) {
    if (completed) return;
    completed = true;
    completer.complete(draft);
  }

  final timeoutTimer = Timer(
    const Duration(seconds: 5),
    () => complete(null),
  );
  unawaited(() async {
    try {
      final code = await targetEngine.getEditedMessageDraft(
        _con.conversationType ?? RCIMIWConversationType.invalid,
        _con.targetId ?? '',
        _con.channelId,
        callback: IRCIMIWGetEditedMessageDraftCallback(
          onSuccess: complete,
          onError: (_) => complete(null),
        ),
      );
      if (code != 0) complete(null);
    } catch (_) {
      complete(null);
    }
  }());
  final draft = await completer.future;
  timeoutTimer.cancel();
  if (_disposed || !_isSessionEngineCurrent(targetEngine)) return null;
  return draft;
}