ensureRemoteDialog method

Future<RxChatImpl?> ensureRemoteDialog(
  1. ChatId chatId
)

Ensures the provided Chat is remotely accessible.

Implementation

Future<RxChatImpl?> ensureRemoteDialog(ChatId chatId) async {
  Log.debug('ensureRemoteDialog($chatId)', '$runtimeType');

  if (chatId.isLocal) {
    if (chatId.isLocalWith(me)) {
      return await ensureRemoteMonolog();
    }

    try {
      final ChatData chat = _chat(
        await _graphQlProvider.createDialogChat(chatId.userId),
      );

      return _putEntry(chat);
    } on CreateDialogException catch (e) {
      switch (e.code) {
        case CreateDialogChatErrorCode.artemisUnknown:
        case CreateDialogChatErrorCode.blocked:
          rethrow;

        case CreateDialogChatErrorCode.unknownUser:
          return null;

        case CreateDialogChatErrorCode.useMonolog:
          // No-op, should be retrieved via [get] below.
          break;
      }
    }
  }

  return await get(chatId);
}