mirror of
https://github.com/element-hq/synapse.git
synced 2026-07-31 03:00:25 +00:00
Revert Event.internal_metadata changes from https://github.com/element-hq/synapse/pull/19556/changes/9b6ff35e9a53f1a6fa50c046132ba8115294c480
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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": ...
|
||||
|
||||
Reference in New Issue
Block a user