generalize get_room_version

There are other fields of `m.room.create` events that are useful to
individually extract without caring about the values of other fields.
This commit is contained in:
Charles Hall 2024-11-08 18:11:11 -08:00
parent c9c30fba30
commit a4e1522875
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF
4 changed files with 69 additions and 24 deletions

View file

@ -36,6 +36,7 @@ use crate::{
appservice::NamespaceRegex,
globals::{marker, SigningKeys},
pdu::{EventHash, PduBuilder},
rooms::state::ExtractVersion,
},
services,
utils::{self, on_demand_hashmap::KeyToken, room_version::RoomVersion},
@ -476,8 +477,10 @@ impl Service {
match pdu.kind {
TimelineEventType::RoomRedaction => {
let room_version_id =
services().rooms.state.get_room_version(&pdu.room_id)?;
let room_version_id = services()
.rooms
.state
.get_create_content::<ExtractVersion>(&pdu.room_id)?;
let room_version = RoomVersion::try_from(&room_version_id)?;
if room_version.redaction_event_redacts_in_content {
let content = serde_json::from_str::<
@ -774,8 +777,11 @@ impl Service {
.collect();
// If there was no create event yet, assume we are creating a room
let room_version_id =
services().rooms.state.get_room_version(room_id).or_else(|_| {
let room_version_id = services()
.rooms
.state
.get_create_content::<ExtractVersion>(room_id)
.or_else(|_| {
if event_type == TimelineEventType::RoomCreate {
let content =
serde_json::from_str::<RoomCreateEventContent>(
@ -1064,8 +1070,10 @@ impl Service {
// If redaction event is not authorized, do not append it to the
// timeline
if pdu.kind == TimelineEventType::RoomRedaction {
let room_version_id =
services().rooms.state.get_room_version(&pdu.room_id)?;
let room_version_id = services()
.rooms
.state
.get_create_content::<ExtractVersion>(&pdu.room_id)?;
let room_version = RoomVersion::try_from(&room_version_id)?;
if room_version.redaction_event_redacts_in_content {
let content =
@ -1257,8 +1265,10 @@ impl Service {
)?;
}
let room_version_id =
services().rooms.state.get_room_version(&pdu.room_id)?;
let room_version_id = services()
.rooms
.state
.get_create_content::<ExtractVersion>(&pdu.room_id)?;
pdu.redact(room_version_id, reason)?;
self.replace_pdu(