This commit is contained in:
Jason Robinson
2026-07-17 00:12:00 +03:00
parent 865273c524
commit a01fc2ef0a
3 changed files with 3 additions and 141 deletions
-81
View File
@@ -66,8 +66,6 @@ enum EventInternalMetadataData {
TokenId(i64),
DeviceId(Box<str>),
CalculatedAuthEventIDs(Vec<String>), // MSC4242: State DAGs
PrevMembership(Box<str>),
MembershipUpdateUsersInSharedRooms(Vec<String>),
}
impl EventInternalMetadataData {
@@ -147,14 +145,6 @@ impl EventInternalMetadataData {
pyo3::intern!(py, "calculated_auth_event_ids"),
o.into_pyobject(py).unwrap().into_any(),
),
EventInternalMetadataData::PrevMembership(o) => (
pyo3::intern!(py, "prev_membership"),
o.into_pyobject(py).unwrap_infallible().into_any(),
),
EventInternalMetadataData::MembershipUpdateUsersInSharedRooms(o) => (
pyo3::intern!(py, "membership_update_users_in_shared_rooms"),
o.into_pyobject(py).unwrap().into_any(),
),
}
}
@@ -238,19 +228,6 @@ impl EventInternalMetadataData {
.extract()
.with_context(|| format!("'{key_str}' has invalid type"))?,
),
"prev_membership" => EventInternalMetadataData::PrevMembership(
value
.extract()
.map(String::into_boxed_str)
.with_context(|| format!("'{key_str}' has invalid type"))?,
),
"membership_update_users_in_shared_rooms" => {
EventInternalMetadataData::MembershipUpdateUsersInSharedRooms(
value
.extract()
.with_context(|| format!("'{key_str}' has invalid type"))?,
)
}
_ => return Ok(None),
};
@@ -428,14 +405,6 @@ impl EventInternalMetadataInner {
get_property_opt!(self, DelayId).map(|s| s.deref())
}
pub fn get_prev_membership(&self) -> Option<&str> {
get_property_opt!(self, PrevMembership).map(|s| s.deref())
}
pub fn get_membership_update_users_in_shared_rooms(&self) -> Option<&Vec<String>> {
get_property_opt!(self, MembershipUpdateUsersInSharedRooms)
}
pub fn get_calculated_auth_event_ids(&self) -> Option<&Vec<String>> {
get_property_opt!(self, CalculatedAuthEventIDs)
}
@@ -505,14 +474,6 @@ impl EventInternalMetadataInner {
pub fn set_calculated_auth_event_ids(&mut self, obj: Vec<String>) {
set_property!(self, CalculatedAuthEventIDs, obj);
}
pub fn set_prev_membership(&mut self, obj: String) {
set_property!(self, PrevMembership, obj.into_boxed_str());
}
pub fn set_membership_update_users_in_shared_rooms(&mut self, obj: Vec<String>) {
set_property!(self, MembershipUpdateUsersInSharedRooms, obj);
}
}
#[pyclass(frozen, skip_from_py_object)]
@@ -575,24 +536,6 @@ impl EventInternalMetadata {
pub fn policy_server_spammy(&self) -> PyResult<bool> {
Ok(self.read_inner()?.get_policy_server_spammy())
}
/// The previous membership, set only if this is a membership event.
pub fn prev_membership(&self) -> PyResult<Option<String>> {
Ok(self
.read_inner()?
.get_prev_membership()
.map(|s| s.to_owned()))
}
/// For membership events, this will contain a list of users who
/// would be interested in the user's profile updates, triggered
/// by the membership change.
pub fn membership_update_users_in_shared_rooms(&self) -> PyResult<Option<Vec<String>>> {
Ok(self
.read_inner()?
.get_membership_update_users_in_shared_rooms()
.cloned())
}
}
/// Helper to convert `None` to an `AttributeError` for a property getter.
@@ -887,28 +830,4 @@ impl EventInternalMetadata {
self.write_inner()?.set_device_id(obj);
Ok(())
}
/// The previous membership, set only if this is a membership event.
#[getter]
fn get_prev_membership(&self) -> PyResult<Option<String>> {
let guard = self.read_inner()?;
Ok(guard.get_prev_membership().map(|s| s.to_owned()))
}
#[setter]
fn set_prev_membership(&self, obj: String) -> PyResult<()> {
self.write_inner()?.set_prev_membership(obj);
Ok(())
}
#[getter]
pub fn get_membership_update_users_in_shared_rooms(&self) -> PyResult<Option<Vec<String>>> {
let guard = self.read_inner()?;
Ok(guard.get_membership_update_users_in_shared_rooms().cloned())
}
#[setter]
fn set_membership_update_users_in_shared_rooms(&self, obj: Vec<String>) -> PyResult<()> {
self.write_inner()?
.set_membership_update_users_in_shared_rooms(obj);
Ok(())
}
}
+3 -53
View File
@@ -1990,68 +1990,18 @@ class EventCreationHandler:
requester, is_admin_redaction=is_admin_redaction
)
# Run checks/actions on event based on type.
# This Member check runs for local users only, as we do a
# `notify_user_joined_room` notifier call or generate profile update
# stream updates for local users.
# If this needs to apply to remote users at some point, the
# `self.store.get_local_current_membership_for_user_in_room` below
# needs changing to something else.
if (
event.type == EventTypes.Member
and event.membership in (Membership.JOIN, Membership.LEAVE)
and self.hs.is_mine_id(event.state_key)
):
# run checks/actions on event based on type
if event.type == EventTypes.Member and event.membership == Membership.JOIN:
(
current_membership,
_,
) = await self.store.get_local_current_membership_for_user_in_room(
event.state_key, event.room_id
)
if current_membership:
event.internal_metadata.prev_membership = current_membership
if (
event.membership == Membership.LEAVE
and current_membership != Membership.LEAVE
):
# The user left the room - calculate affected users for
# the event internal metadata, for later usage when persisting
# the actual membership event, which will generate rows into
# the profile updates stream tables.
users_left_in_room = set(
await self.store.get_local_users_in_room(event.room_id)
)
users_left_in_room.discard(event.state_key)
users_still_sharing_rooms = await self.store.do_users_share_a_room(
event.state_key,
users_left_in_room,
exclude_room_id=event.room_id,
)
event.internal_metadata.membership_update_users_in_shared_rooms = (
list(users_left_in_room - users_still_sharing_rooms)
)
if (
event.membership == Membership.JOIN
and current_membership != Membership.JOIN
):
if current_membership != Membership.JOIN:
self._notifier.notify_user_joined_room(
event.event_id, event.room_id
)
# The user joined a room - calculate affected users for
# the event internal metadata, for later usage when persisting
# the actual membership event, which will generate rows into
# the profile updates stream tables.
users_in_room = set(
await self.store.get_local_users_in_room(event.room_id)
)
users_in_room.discard(event.state_key)
event.internal_metadata.membership_update_users_in_shared_rooms = (
list(users_in_room)
)
if event.type == EventTypes.ServerACL:
self._storage_controllers.state.get_server_acl_for_room.invalidate(
-7
View File
@@ -65,13 +65,6 @@ class EventInternalMetadata:
# MSC4242 state dags
calculated_auth_event_ids: list[str]
prev_membership: str | None
"""The previous membership, set only if this is a membership event."""
membership_update_users_in_shared_rooms: list[str] | None
"""For membership events, this will contain a list of users who
would be interested in the users profile updates, triggered
by the membership change."""
def get_dict(self) -> JsonDict: ...
def is_outlier(self) -> bool: ...
def copy(self) -> "EventInternalMetadata": ...