decryptRoomEvent method

Future<Event> decryptRoomEvent(
  1. String roomId,
  2. Event event, {
  3. bool store = false,
  4. EventUpdateType updateType = EventUpdateType.timeline,
})

Implementation

Future<Event> decryptRoomEvent(
  String roomId,
  Event event, {
  bool store = false,
  EventUpdateType updateType = EventUpdateType.timeline,
}) async {
  if (event.type != EventTypes.Encrypted || event.redacted) {
    return event;
  }
  final content = event.parsedRoomEncryptedContent;
  final sessionId = content.sessionId;
  try {
    if (client.database != null &&
        sessionId != null &&
        !(keyManager
                .getInboundGroupSession(
                  roomId,
                  sessionId,
                )
                ?.isValid ??
            false)) {
      await keyManager.loadInboundGroupSession(
        roomId,
        sessionId,
      );
    }
    event = decryptRoomEventSync(roomId, event);
    if (event.type == EventTypes.Encrypted &&
        event.content['can_request_session'] == true &&
        sessionId != null) {
      keyManager.maybeAutoRequest(
        roomId,
        sessionId,
        content.senderKey,
      );
    }
    if (event.type != EventTypes.Encrypted && store) {
      if (updateType != EventUpdateType.history) {
        event.room.setState(event);
      }
      await client.database?.storeEventUpdate(
        EventUpdate(
          content: event.toJson(),
          roomID: roomId,
          type: updateType,
        ),
        client,
      );
    }
    return event;
  } catch (e, s) {
    Logs().e('[Decrypt] Could not decrpyt event', e, s);
    return event;
  }
}