maybeAutoRequest method
Attempt auto-request for a key
Implementation
FutureOr<void> maybeAutoRequest(
Room room,
String sessionId,
String? senderKey, {
bool tryOnlineBackup = true,
bool onlineKeyBackupOnly = true,
bool awaitRequest = false,
}) async {
if (!onlineKeyBackupOnly && client.isUnknownSession) return;
final requestIdent = '${room.id}|$sessionId';
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;
try {
await request(
room,
sessionId,
senderKey,
tryOnlineBackup: tryOnlineBackup,
onlineKeyBackupOnly: onlineKeyBackupOnly,
);
} catch (_) {
// A failed attempt must not block a later retry for this session.
_requestedSessionIdCompleters.remove(requestIdent);
rethrow;
} finally {
completer.complete();
}
}
if (awaitRequest) {
await requestFn();
} else {
runInRoot(requestFn);
}
}