maybeAutoRequest method

FutureOr<void> maybeAutoRequest(
  1. String roomId,
  2. String sessionId,
  3. String? senderKey, {
  4. bool tryOnlineBackup = true,
  5. bool onlineKeyBackupOnly = true,
  6. bool awaitRequest = false,
})

Attempt auto-request for a key

Implementation

FutureOr<void> maybeAutoRequest(
  String roomId,
  String sessionId,
  String? senderKey, {
  bool tryOnlineBackup = true,
  bool onlineKeyBackupOnly = true,
  bool awaitRequest = false,
}) async {
  final room = client.getRoomById(roomId);
  final requestIdent = '$roomId|$sessionId';
  if (room != null && !client.isUnknownSession) {
    final existingReqCompleter = _requestedSessionIdCompleters[requestIdent];
    if (existingReqCompleter != null) {
      if (awaitRequest) {
        await existingReqCompleter.future;
      }
      // return if already exists (after awaiting completion if required)
      return;
    }

    Future<void> requestFn() async {
      final completer = Completer<void>();
      _requestedSessionIdCompleters[requestIdent] = completer;
      await request(
        room,
        sessionId,
        senderKey,
        tryOnlineBackup: tryOnlineBackup,
        onlineKeyBackupOnly: onlineKeyBackupOnly,
      );
      completer.complete();
    }

    if (awaitRequest) {
      await requestFn();
    } else {
      runInRoot(requestFn);
    }
  }
}